aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hampl <kopomir@gmail.com>2019-02-14 15:23:49 +0000
committerGitHub <noreply@github.com>2019-02-14 15:23:49 +0000
commit6bd5f8ccbd8c44c3311ef36b0e2de9ede4fa71ed (patch)
treede40a36d34cb734c2765a705506436f8b38e28a9
parentf0c36a3d49fad46e0fb6cafeb7a021dd5d775993 (diff)
New Style Generator (#8)
-rw-r--r--.gitignore2
-rw-r--r--README.md10
-rw-r--r--docs/style-generator/index.html10714
-rw-r--r--docs/style-generator/style-generator.3de3c5f3.map1
-rw-r--r--docs/style-generator/style-generator.90798390.css1
-rw-r--r--docs/style-generator/style-generator.e65d4760.js39
-rw-r--r--examples/Example02.elm8
-rw-r--r--examples/Outdoors.elm1079
-rw-r--r--examples/Styles/Dark.elm2888
-rw-r--r--examples/Styles/Light.elm2906
-rw-r--r--examples/Styles/Outdoors.elm4267
-rw-r--r--examples/Styles/Satellite.elm24
-rw-r--r--examples/Styles/SatelliteStreets.elm2939
-rw-r--r--examples/Styles/Streets.elm3737
-rw-r--r--examples/index.html10
-rw-r--r--examples/index.js9
-rw-r--r--examples/package-lock.json8007
-rw-r--r--examples/package.json20
-rw-r--r--package-lock.json3058
-rw-r--r--package.json4
-rw-r--r--src/Mapbox/Expression.elm10
-rw-r--r--style-generator/elm.json1
-rw-r--r--style-generator/index.html10
-rw-r--r--style-generator/index.js81
-rw-r--r--style-generator/package-lock.json7157
-rw-r--r--style-generator/package.json25
-rw-r--r--style-generator/readme.md7
-rw-r--r--style-generator/src/Color.elm104
-rw-r--r--style-generator/src/Decoder.elm707
-rw-r--r--style-generator/src/Decoder/Expression.elm345
-rw-r--r--style-generator/src/Decoder/Generic.elm52
-rw-r--r--style-generator/src/Decoder/Helpers.elm9
-rw-r--r--style-generator/src/Decoder/Legacy.elm110
-rw-r--r--style-generator/src/Lib.elm101
-rw-r--r--style-generator/src/Main.elm209
-rw-r--r--style-generator/src/MyElm/Advanced.elm46
-rw-r--r--style-generator/src/MyElm/Stringify.elm282
-rw-r--r--style-generator/src/MyElm/Syntax.elm678
-rw-r--r--style-generator/src/MyElm/Types.elm56
-rw-r--r--style-generator/src/Writer.elm640
40 files changed, 36989 insertions, 13364 deletions
diff --git a/.gitignore b/.gitignore
index 50cb329..ba5b4d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,5 @@ elm-stuff/
examples/example01.js
node_modules/
dist/
+.cache
+.env
diff --git a/README.md b/README.md
index 5a41b02..b65c18a 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ probably the easiest is to add:
If you are running a module bundler, you should be able to
```javascript
-import elmMapbox from "elm-mapbox";
+import {registerCustomElement, registerPorts} from "elm-mapbox";
```
instead.
@@ -58,8 +58,6 @@ It is important that these operations proceed in this order, i.e. the custom ele
Additionally, you may pass in your mapbox token as an option through this method:
```javascript
-import elmMapbox from "elm-mapbox";
-
elmMapbox.registerCustomElement({token: 'pk45.rejkgnwejk'});
var app = Elm.MyApp.init();
elmMapbox.registerPorts(app);
@@ -233,7 +231,9 @@ view model =
```
### [Generating the Elm Style Code](https://code.gampleman.eu/elm-mapbox/style-generator/)
-There is a very rough version of a [tool that can help generate styles](https://code.gampleman.eu/elm-mapbox/style-generator/) for this library. It is very alpha at the moment, so please be tolerant with its failures.
+There is a very rough version of a [tool that can help generate styles](https://code.gampleman.eu/elm-mapbox/style-generator/) for this library.
+
+The [examples/Styles](https://github.com/gampleman/elm-mapbox/tree/master/examples/Styles) folder has the default Mapbox styles as code, which you can use to start of your project.
### Support
@@ -269,6 +269,6 @@ The `elmMapbox.registerPorts` function accepts an option object that takes the f
### License
-(c) Jakub Hampl 2018
+(c) Jakub Hampl 2018, 2019
MIT License
diff --git a/docs/style-generator/index.html b/docs/style-generator/index.html
index a85638d..c3638e1 100644
--- a/docs/style-generator/index.html
+++ b/docs/style-generator/index.html
@@ -1,10713 +1 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <meta charset="UTF-8">
- <title>Main</title>
-</head>
-
-<body>
-<div id="elm-f0111bc4e658d0f98db96260c16f7e49"></div>
-<script>
-(function(scope){
-'use strict';
-
-function F(arity, fun, wrapper) {
- wrapper.a = arity;
- wrapper.f = fun;
- return wrapper;
-}
-
-function F2(fun) {
- return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
-}
-function F3(fun) {
- return F(3, fun, function(a) {
- return function(b) { return function(c) { return fun(a, b, c); }; };
- });
-}
-function F4(fun) {
- return F(4, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return fun(a, b, c, d); }; }; };
- });
-}
-function F5(fun) {
- return F(5, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
- });
-}
-function F6(fun) {
- return F(6, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return fun(a, b, c, d, e, f); }; }; }; }; };
- });
-}
-function F7(fun) {
- return F(7, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
- });
-}
-function F8(fun) {
- return F(8, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return function(h) {
- return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
- });
-}
-function F9(fun) {
- return F(9, fun, function(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return function(h) { return function(i) {
- return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
- });
-}
-
-function A2(fun, a, b) {
- return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
-}
-function A3(fun, a, b, c) {
- return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
-}
-function A4(fun, a, b, c, d) {
- return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
-}
-function A5(fun, a, b, c, d, e) {
- return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
-}
-function A6(fun, a, b, c, d, e, f) {
- return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
-}
-function A7(fun, a, b, c, d, e, f, g) {
- return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
-}
-function A8(fun, a, b, c, d, e, f, g, h) {
- return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
-}
-function A9(fun, a, b, c, d, e, f, g, h, i) {
- return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
-}
-
-
-
-
-var _List_Nil = { $: 0 };
-var _List_Nil_UNUSED = { $: '[]' };
-
-function _List_Cons(hd, tl) { return { $: 1, a: hd, b: tl }; }
-function _List_Cons_UNUSED(hd, tl) { return { $: '::', a: hd, b: tl }; }
-
-
-var _List_cons = F2(_List_Cons);
-
-function _List_fromArray(arr)
-{
- var out = _List_Nil;
- for (var i = arr.length; i--; )
- {
- out = _List_Cons(arr[i], out);
- }
- return out;
-}
-
-function _List_toArray(xs)
-{
- for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
- {
- out.push(xs.a);
- }
- return out;
-}
-
-var _List_map2 = F3(function(f, xs, ys)
-{
- for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
- {
- arr.push(A2(f, xs.a, ys.a));
- }
- return _List_fromArray(arr);
-});
-
-var _List_map3 = F4(function(f, xs, ys, zs)
-{
- for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
- {
- arr.push(A3(f, xs.a, ys.a, zs.a));
- }
- return _List_fromArray(arr);
-});
-
-var _List_map4 = F5(function(f, ws, xs, ys, zs)
-{
- for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
- {
- arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
- }
- return _List_fromArray(arr);
-});
-
-var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
-{
- for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
- {
- arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
- }
- return _List_fromArray(arr);
-});
-
-var _List_sortBy = F2(function(f, xs)
-{
- return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
- return _Utils_cmp(f(a), f(b));
- }));
-});
-
-var _List_sortWith = F2(function(f, xs)
-{
- return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
- var ord = A2(f, a, b);
- return ord === elm$core$Basics$EQ ? 0 : ord === elm$core$Basics$LT ? -1 : 1;
- }));
-});
-
-
-
-// EQUALITY
-
-function _Utils_eq(x, y)
-{
- for (
- var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
- isEqual && (pair = stack.pop());
- isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
- )
- {}
-
- return isEqual;
-}
-
-function _Utils_eqHelp(x, y, depth, stack)
-{
- if (depth > 100)
- {
- stack.push(_Utils_Tuple2(x,y));
- return true;
- }
-
- if (x === y)
- {
- return true;
- }
-
- if (typeof x !== 'object' || x === null || y === null)
- {
- typeof x === 'function' && _Debug_crash(5);
- return false;
- }
-
- /**_UNUSED/
- if (x.$ === 'Set_elm_builtin')
- {
- x = elm$core$Set$toList(x);
- y = elm$core$Set$toList(y);
- }
- if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
- {
- x = elm$core$Dict$toList(x);
- y = elm$core$Dict$toList(y);
- }
- //*/
-
- /**/
- if (x.$ < 0)
- {
- x = elm$core$Dict$toList(x);
- y = elm$core$Dict$toList(y);
- }
- //*/
-
- for (var key in x)
- {
- if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
-}
-
-var _Utils_equal = F2(_Utils_eq);
-var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
-
-
-
-// COMPARISONS
-
-// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
-// the particular integer values assigned to LT, EQ, and GT.
-
-function _Utils_cmp(x, y, ord)
-{
- if (typeof x !== 'object')
- {
- return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
- }
-
- /**_UNUSED/
- if (x instanceof String)
- {
- var a = x.valueOf();
- var b = y.valueOf();
- return a === b ? 0 : a < b ? -1 : 1;
- }
- //*/
-
- /**/
- if (!x.$)
- //*/
- /**_UNUSED/
- if (x.$[0] === '#')
- //*/
- {
- return (ord = _Utils_cmp(x.a, y.a))
- ? ord
- : (ord = _Utils_cmp(x.b, y.b))
- ? ord
- : _Utils_cmp(x.c, y.c);
- }
-
- // traverse conses until end of a list or a mismatch
- for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
- return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
-}
-
-var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
-var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
-var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
-var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
-
-var _Utils_compare = F2(function(x, y)
-{
- var n = _Utils_cmp(x, y);
- return n < 0 ? elm$core$Basics$LT : n ? elm$core$Basics$GT : elm$core$Basics$EQ;
-});
-
-
-// COMMON VALUES
-
-var _Utils_Tuple0 = 0;
-var _Utils_Tuple0_UNUSED = { $: '#0' };
-
-function _Utils_Tuple2(a, b) { return { a: a, b: b }; }
-function _Utils_Tuple2_UNUSED(a, b) { return { $: '#2', a: a, b: b }; }
-
-function _Utils_Tuple3(a, b, c) { return { a: a, b: b, c: c }; }
-function _Utils_Tuple3_UNUSED(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
-
-function _Utils_chr(c) { return c; }
-function _Utils_chr_UNUSED(c) { return new String(c); }
-
-
-// RECORDS
-
-function _Utils_update(oldRecord, updatedFields)
-{
- var newRecord = {};
-
- for (var key in oldRecord)
- {
- newRecord[key] = oldRecord[key];
- }
-
- for (var key in updatedFields)
- {
- newRecord[key] = updatedFields[key];
- }
-
- return newRecord;
-}
-
-
-// APPEND
-
-var _Utils_append = F2(_Utils_ap);
-
-function _Utils_ap(xs, ys)
-{
- // append Strings
- if (typeof xs === 'string')
- {
- return xs + ys;
- }
-
- // append Lists
- if (!xs.b)
- {
- return ys;
- }
- var root = _List_Cons(xs.a, ys);
- xs = xs.b
- for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
- {
- curr = curr.b = _List_Cons(xs.a, ys);
- }
- return root;
-}
-
-
-
-var _JsArray_empty = [];
-
-function _JsArray_singleton(value)
-{
- return [value];
-}
-
-function _JsArray_length(array)
-{
- return array.length;
-}
-
-var _JsArray_initialize = F3(function(size, offset, func)
-{
- var result = new Array(size);
-
- for (var i = 0; i < size; i++)
- {
- result[i] = func(offset + i);
- }
-
- return result;
-});
-
-var _JsArray_initializeFromList = F2(function (max, ls)
-{
- var result = new Array(max);
-
- for (var i = 0; i < max && ls.b; i++)
- {
- result[i] = ls.a;
- ls = ls.b;
- }
-
- result.length = i;
- return _Utils_Tuple2(result, ls);
-});
-
-var _JsArray_unsafeGet = F2(function(index, array)
-{
- return array[index];
-});
-
-var _JsArray_unsafeSet = F3(function(index, value, array)
-{
- var length = array.length;
- var result = new Array(length);
-
- for (var i = 0; i < length; i++)
- {
- result[i] = array[i];
- }
-
- result[index] = value;
- return result;
-});
-
-var _JsArray_push = F2(function(value, array)
-{
- var length = array.length;
- var result = new Array(length + 1);
-
- for (var i = 0; i < length; i++)
- {
- result[i] = array[i];
- }
-
- result[length] = value;
- return result;
-});
-
-var _JsArray_foldl = F3(function(func, acc, array)
-{
- var length = array.length;
-
- for (var i = 0; i < length; i++)
- {
- acc = A2(func, array[i], acc);
- }
-
- return acc;
-});
-
-var _JsArray_foldr = F3(function(func, acc, array)
-{
- for (var i = array.length - 1; i >= 0; i--)
- {
- acc = A2(func, array[i], acc);
- }
-
- return acc;
-});
-
-var _JsArray_map = F2(function(func, array)
-{
- var length = array.length;
- var result = new Array(length);
-
- for (var i = 0; i < length; i++)
- {
- result[i] = func(array[i]);
- }
-
- return result;
-});
-
-var _JsArray_indexedMap = F3(function(func, offset, array)
-{
- var length = array.length;
- var result = new Array(length);
-
- for (var i = 0; i < length; i++)
- {
- result[i] = A2(func, offset + i, array[i]);
- }
-
- return result;
-});
-
-var _JsArray_slice = F3(function(from, to, array)
-{
- return array.slice(from, to);
-});
-
-var _JsArray_appendN = F3(function(n, dest, source)
-{
- var destLen = dest.length;
- var itemsToCopy = n - destLen;
-
- if (itemsToCopy > source.length)
- {
- itemsToCopy = source.length;
- }
-
- var size = destLen + itemsToCopy;
- var result = new Array(size);
-
- for (var i = 0; i < destLen; i++)
- {
- result[i] = dest[i];
- }
-
- for (var i = 0; i < itemsToCopy; i++)
- {
- result[i + destLen] = source[i];
- }
-
- return result;
-});
-
-
-
-// LOG
-
-var _Debug_log = F2(function(tag, value)
-{
- return value;
-});
-
-var _Debug_log_UNUSED = F2(function(tag, value)
-{
- console.log(tag + ': ' + _Debug_toString(value));
- return value;
-});
-
-
-// TODOS
-
-function _Debug_todo(moduleName, region)
-{
- return function(message) {
- _Debug_crash(8, moduleName, region, message);
- };
-}
-
-function _Debug_todoCase(moduleName, region, value)
-{
- return function(message) {
- _Debug_crash(9, moduleName, region, value, message);
- };
-}
-
-
-// TO STRING
-
-function _Debug_toString(value)
-{
- return '<internals>';
-}
-
-function _Debug_toString_UNUSED(value)
-{
- return _Debug_toAnsiString(false, value);
-}
-
-function _Debug_toAnsiString(ansi, value)
-{
- if (typeof value === 'function')
- {
- return _Debug_internalColor(ansi, '<function>');
- }
-
- if (typeof value === 'boolean')
- {
- return _Debug_ctorColor(ansi, value ? 'True' : 'False');
- }
-
- if (typeof value === 'number')
- {
- return _Debug_numberColor(ansi, value + '');
- }
-
- if (value instanceof String)
- {
- return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
- }
-
- if (typeof value === 'string')
- {
- return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
- }
-
- if (typeof value === 'object' && '$' in value)
- {
- var tag = value.$;
-
- if (typeof tag === 'number')
- {
- return _Debug_internalColor(ansi, '<internals>');
- }
-
- if (tag[0] === '#')
- {
- var output = [];
- for (var k in value)
- {
- if (k === '$') continue;
- output.push(_Debug_toAnsiString(ansi, value[k]));
- }
- return '(' + output.join(',') + ')';
- }
-
- if (tag === 'Set_elm_builtin')
- {
- return _Debug_ctorColor(ansi, 'Set')
- + _Debug_fadeColor(ansi, '.fromList') + ' '
- + _Debug_toAnsiString(ansi, elm$core$Set$toList(value));
- }
-
- if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
- {
- return _Debug_ctorColor(ansi, 'Dict')
- + _Debug_fadeColor(ansi, '.fromList') + ' '
- + _Debug_toAnsiString(ansi, elm$core$Dict$toList(value));
- }
-
- if (tag === 'Array_elm_builtin')
- {
- return _Debug_ctorColor(ansi, 'Array')
- + _Debug_fadeColor(ansi, '.fromList') + ' '
- + _Debug_toAnsiString(ansi, elm$core$Array$toList(value));
- }
-
- if (tag === '::' || tag === '[]')
- {
- var output = '[';
-
- value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
-
- for (; value.b; value = value.b) // WHILE_CONS
- {
- output += ',' + _Debug_toAnsiString(ansi, value.a);
- }
- return output + ']';
- }
-
- var output = '';
- for (var i in value)
- {
- if (i === '$') continue;
- var str = _Debug_toAnsiString(ansi, value[i]);
- var c0 = str[0];
- var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
- output += ' ' + (parenless ? str : '(' + str + ')');
- }
- return _Debug_ctorColor(ansi, tag) + output;
- }
-
- if (typeof value === 'object')
- {
- var output = [];
- for (var key in value)
- {
- var field = key[0] === '_' ? key.slice(1) : key;
- output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
- }
- if (output.length === 0)
- {
- return '{}';
- }
- return '{ ' + output.join(', ') + ' }';
- }
-
- return _Debug_internalColor(ansi, '<internals>');
-}
-
-function _Debug_addSlashes(str, isChar)
-{
- var s = str
- .replace(/\\/g, '\\\\')
- .replace(/\n/g, '\\n')
- .replace(/\t/g, '\\t')
- .replace(/\r/g, '\\r')
- .replace(/\v/g, '\\v')
- .replace(/\0/g, '\\0');
-
- if (isChar)
- {
- return s.replace(/\'/g, '\\\'');
- }
- else
- {
- return s.replace(/\"/g, '\\"');
- }
-}
-
-function _Debug_ctorColor(ansi, string)
-{
- return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
-}
-
-function _Debug_numberColor(ansi, string)
-{
- return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
-}
-
-function _Debug_stringColor(ansi, string)
-{
- return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
-}
-
-function _Debug_charColor(ansi, string)
-{
- return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
-}
-
-function _Debug_fadeColor(ansi, string)
-{
- return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
-}
-
-function _Debug_internalColor(ansi, string)
-{
- return ansi ? '\x1b[94m' + string + '\x1b[0m' : string;
-}
-
-
-
-// CRASH
-
-
-function _Debug_crash(identifier)
-{
- throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
-}
-
-
-function _Debug_crash_UNUSED(identifier, fact1, fact2, fact3, fact4)
-{
- switch(identifier)
- {
- case 0:
- throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
-
- case 1:
- throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
-
- case 2:
- var message = fact1;
- throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + message);
-
- case 3:
- var portName = fact1;
- throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
-
- case 4:
- var portName = fact1;
- var problem = fact2;
- throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
-
- case 5:
- throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
-
- case 6:
- var moduleName = fact1;
- throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
-
- case 8:
- var moduleName = fact1;
- var region = fact2;
- var message = fact3;
- throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
-
- case 9:
- var moduleName = fact1;
- var region = fact2;
- var value = fact3;
- var message = fact4;
- throw new Error(
- 'TODO in module `' + moduleName + '` from the `case` expression '
- + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
- + _Debug_toString(value).replace('\n', '\n ')
- + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
- );
-
- case 10:
- throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
-
- case 11:
- throw new Error('Cannot perform mod 0. Division by zero error.');
- }
-}
-
-function _Debug_regionToString(region)
-{
- if (region.bY.N === region.bA.N)
- {
- return 'on line ' + region.bY.N;
- }
- return 'on lines ' + region.bY.N + ' through ' + region.bA.N;
-}
-
-
-
-// MATH
-
-var _Basics_add = F2(function(a, b) { return a + b; });
-var _Basics_sub = F2(function(a, b) { return a - b; });
-var _Basics_mul = F2(function(a, b) { return a * b; });
-var _Basics_fdiv = F2(function(a, b) { return a / b; });
-var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
-var _Basics_pow = F2(Math.pow);
-
-var _Basics_remainderBy = F2(function(b, a) { return a % b; });
-
-// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
-var _Basics_modBy = F2(function(modulus, x)
-{
- var answer = x % modulus;
- return modulus === 0
- ? _Debug_crash(11)
- :
- ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
- ? answer + modulus
- : answer;
-});
-
-
-// TRIGONOMETRY
-
-var _Basics_pi = Math.PI;
-var _Basics_e = Math.E;
-var _Basics_cos = Math.cos;
-var _Basics_sin = Math.sin;
-var _Basics_tan = Math.tan;
-var _Basics_acos = Math.acos;
-var _Basics_asin = Math.asin;
-var _Basics_atan = Math.atan;
-var _Basics_atan2 = F2(Math.atan2);
-
-
-// MORE MATH
-
-function _Basics_toFloat(x) { return x; }
-function _Basics_truncate(n) { return n | 0; }
-function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
-
-var _Basics_ceiling = Math.ceil;
-var _Basics_floor = Math.floor;
-var _Basics_round = Math.round;
-var _Basics_sqrt = Math.sqrt;
-var _Basics_log = Math.log;
-var _Basics_isNaN = isNaN;
-
-
-// BOOLEANS
-
-function _Basics_not(bool) { return !bool; }
-var _Basics_and = F2(function(a, b) { return a && b; });
-var _Basics_or = F2(function(a, b) { return a || b; });
-var _Basics_xor = F2(function(a, b) { return a !== b; });
-
-
-
-// CORE DECODERS
-
-function _Json_succeed(msg)
-{
- return {
- $: 0,
- a: msg
- };
-}
-
-function _Json_fail(msg)
-{
- return {
- $: 1,
- a: msg
- };
-}
-
-var _Json_decodeInt = { $: 2 };
-var _Json_decodeBool = { $: 3 };
-var _Json_decodeFloat = { $: 4 };
-var _Json_decodeValue = { $: 5 };
-var _Json_decodeString = { $: 6 };
-
-function _Json_decodeList(decoder) { return { $: 7, b: decoder }; }
-function _Json_decodeArray(decoder) { return { $: 8, b: decoder }; }
-
-function _Json_decodeNull(value) { return { $: 9, c: value }; }
-
-var _Json_decodeField = F2(function(field, decoder)
-{
- return {
- $: 10,
- d: field,
- b: decoder
- };
-});
-
-var _Json_decodeIndex = F2(function(index, decoder)
-{
- return {
- $: 11,
- e: index,
- b: decoder
- };
-});
-
-function _Json_decodeKeyValuePairs(decoder)
-{
- return {
- $: 12,
- b: decoder
- };
-}
-
-function _Json_mapMany(f, decoders)
-{
- return {
- $: 13,
- f: f,
- g: decoders
- };
-}
-
-var _Json_andThen = F2(function(callback, decoder)
-{
- return {
- $: 14,
- b: decoder,
- h: callback
- };
-});
-
-function _Json_oneOf(decoders)
-{
- return {
- $: 15,
- g: decoders
- };
-}
-
-
-// DECODING OBJECTS
-
-var _Json_map1 = F2(function(f, d1)
-{
- return _Json_mapMany(f, [d1]);
-});
-
-var _Json_map2 = F3(function(f, d1, d2)
-{
- return _Json_mapMany(f, [d1, d2]);
-});
-
-var _Json_map3 = F4(function(f, d1, d2, d3)
-{
- return _Json_mapMany(f, [d1, d2, d3]);
-});
-
-var _Json_map4 = F5(function(f, d1, d2, d3, d4)
-{
- return _Json_mapMany(f, [d1, d2, d3, d4]);
-});
-
-var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
-{
- return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
-});
-
-var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
-{
- return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
-});
-
-var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
-{
- return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
-});
-
-var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
-{
- return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
-});
-
-
-// DECODE
-
-var _Json_runOnString = F2(function(decoder, string)
-{
- try
- {
- var value = JSON.parse(string);
- return _Json_runHelp(decoder, value);
- }
- catch (e)
- {
- return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
- }
-});
-
-var _Json_run = F2(function(decoder, value)
-{
- return _Json_runHelp(decoder, _Json_unwrap(value));
-});
-
-function _Json_runHelp(decoder, value)
-{
- switch (decoder.$)
- {
- case 3:
- return (typeof value === 'boolean')
- ? elm$core$Result$Ok(value)
- : _Json_expecting('a BOOL', value);
-
- case 2:
- if (typeof value !== 'number') {
- return _Json_expecting('an INT', value);
- }
-
- if (-2147483647 < value && value < 2147483647 && (value | 0) === value) {
- return elm$core$Result$Ok(value);
- }
-
- if (isFinite(value) && !(value % 1)) {
- return elm$core$Result$Ok(value);
- }
-
- return _Json_expecting('an INT', value);
-
- case 4:
- return (typeof value === 'number')
- ? elm$core$Result$Ok(value)
- : _Json_expecting('a FLOAT', value);
-
- case 6:
- return (typeof value === 'string')
- ? elm$core$Result$Ok(value)
- : (value instanceof String)
- ? elm$core$Result$Ok(value + '')
- : _Json_expecting('a STRING', value);
-
- case 9:
- return (value === null)
- ? elm$core$Result$Ok(decoder.c)
- : _Json_expecting('null', value);
-
- case 5:
- return elm$core$Result$Ok(_Json_wrap(value));
-
- case 7:
- if (!Array.isArray(value))
- {
- return _Json_expecting('a LIST', value);
- }
- return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
-
- case 8:
- if (!Array.isArray(value))
- {
- return _Json_expecting('an ARRAY', value);
- }
- return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
-
- case 10:
- var field = decoder.d;
- if (typeof value !== 'object' || value === null || !(field in value))
- {
- return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
- }
- var result = _Json_runHelp(decoder.b, value[field]);
- return (elm$core$Result$isOk(result)) ? result : elm$core$Result$Err(A2(elm$json$Json$Decode$Field, field, result.a));
-
- case 11:
- var index = decoder.e;
- if (!Array.isArray(value))
- {
- return _Json_expecting('an ARRAY', value);
- }
- if (index >= value.length)
- {
- return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
- }
- var result = _Json_runHelp(decoder.b, value[index]);
- return (elm$core$Result$isOk(result)) ? result : elm$core$Result$Err(A2(elm$json$Json$Decode$Index, index, result.a));
-
- case 12:
- if (typeof value !== 'object' || value === null || Array.isArray(value))
- {
- return _Json_expecting('an OBJECT', value);
- }
-
- var keyValuePairs = _List_Nil;
- // TODO test perf of Object.keys and switch when support is good enough
- for (var key in value)
- {
- if (value.hasOwnProperty(key))
- {
- var result = _Json_runHelp(decoder.b, value[key]);
- if (!elm$core$Result$isOk(result))
- {
- return elm$core$Result$Err(A2(elm$json$Json$Decode$Field, key, result.a));
- }
- keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
- }
- }
- return elm$core$Result$Ok(elm$core$List$reverse(keyValuePairs));
-
- case 13:
- var answer = decoder.f;
- var decoders = decoder.g;
- for (var i = 0; i < decoders.length; i++)
- {
- var result = _Json_runHelp(decoders[i], value);
- if (!elm$core$Result$isOk(result))
- {
- return result;
- }
- answer = answer(result.a);
- }
- return elm$core$Result$Ok(answer);
-
- case 14:
- var result = _Json_runHelp(decoder.b, value);
- return (!elm$core$Result$isOk(result))
- ? result
- : _Json_runHelp(decoder.h(result.a), value);
-
- case 15:
- var errors = _List_Nil;
- for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
- {
- var result = _Json_runHelp(temp.a, value);
- if (elm$core$Result$isOk(result))
- {
- return result;
- }
- errors = _List_Cons(result.a, errors);
- }
- return elm$core$Result$Err(elm$json$Json$Decode$OneOf(elm$core$List$reverse(errors)));
-
- case 1:
- return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
-
- case 0:
- return elm$core$Result$Ok(decoder.a);
- }
-}
-
-function _Json_runArrayDecoder(decoder, value, toElmValue)
-{
- var len = value.length;
- var array = new Array(len);
- for (var i = 0; i < len; i++)
- {
- var result = _Json_runHelp(decoder, value[i]);
- if (!elm$core$Result$isOk(result))
- {
- return elm$core$Result$Err(A2(elm$json$Json$Decode$Index, i, result.a));
- }
- array[i] = result.a;
- }
- return elm$core$Result$Ok(toElmValue(array));
-}
-
-function _Json_toElmArray(array)
-{
- return A2(elm$core$Array$initialize, array.length, function(i) { return array[i]; });
-}
-
-function _Json_expecting(type, value)
-{
- return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
-}
-
-
-// EQUALITY
-
-function _Json_equality(x, y)
-{
- if (x === y)
- {
- return true;
- }
-
- if (x.$ !== y.$)
- {
- return false;
- }
-
- switch (x.$)
- {
- case 0:
- case 1:
- return x.a === y.a;
-
- case 3:
- case 2:
- case 4:
- case 6:
- case 5:
- return true;
-
- case 9:
- return x.c === y.c;
-
- case 7:
- case 8:
- case 12:
- return _Json_equality(x.b, y.b);
-
- case 10:
- return x.d === y.d && _Json_equality(x.b, y.b);
-
- case 11:
- return x.e === y.e && _Json_equality(x.b, y.b);
-
- case 13:
- return x.f === y.f && _Json_listEquality(x.g, y.g);
-
- case 14:
- return x.h === y.h && _Json_equality(x.b, y.b);
-
- case 15:
- return _Json_listEquality(x.g, y.g);
- }
-}
-
-function _Json_listEquality(aDecoders, bDecoders)
-{
- var len = aDecoders.length;
- if (len !== bDecoders.length)
- {
- return false;
- }
- for (var i = 0; i < len; i++)
- {
- if (!_Json_equality(aDecoders[i], bDecoders[i]))
- {
- return false;
- }
- }
- return true;
-}
-
-
-// ENCODE
-
-var _Json_encode = F2(function(indentLevel, value)
-{
- return JSON.stringify(_Json_unwrap(value), null, indentLevel);
-});
-
-function _Json_wrap_UNUSED(value) { return { $: 0, a: value }; }
-function _Json_unwrap_UNUSED(value) { return value.a; }
-
-function _Json_wrap(value) { return value; }
-function _Json_unwrap(value) { return value; }
-
-function _Json_emptyArray() { return []; }
-function _Json_emptyObject() { return {}; }
-
-var _Json_addField = F3(function(key, value, object)
-{
- object[key] = _Json_unwrap(value);
- return object;
-});
-
-function _Json_addEntry(func)
-{
- return F2(function(entry, array)
- {
- array.push(_Json_unwrap(func(entry)));
- return array;
- });
-}
-
-var _Json_encodeNull = _Json_wrap(null);
-
-
-
-// TASKS
-
-function _Scheduler_succeed(value)
-{
- return {
- $: 0,
- a: value
- };
-}
-
-function _Scheduler_fail(error)
-{
- return {
- $: 1,
- a: error
- };
-}
-
-function _Scheduler_binding(callback)
-{
- return {
- $: 2,
- b: callback,
- c: null
- };
-}
-
-var _Scheduler_andThen = F2(function(callback, task)
-{
- return {
- $: 3,
- b: callback,
- d: task
- };
-});
-
-var _Scheduler_onError = F2(function(callback, task)
-{
- return {
- $: 4,
- b: callback,
- d: task
- };
-});
-
-function _Scheduler_receive(callback)
-{
- return {
- $: 5,
- b: callback
- };
-}
-
-
-// PROCESSES
-
-var _Scheduler_guid = 0;
-
-function _Scheduler_rawSpawn(task)
-{
- var proc = {
- $: 0,
- e: _Scheduler_guid++,
- f: task,
- g: null,
- h: []
- };
-
- _Scheduler_enqueue(proc);
-
- return proc;
-}
-
-function _Scheduler_spawn(task)
-{
- return _Scheduler_binding(function(callback) {
- callback(_Scheduler_succeed(_Scheduler_rawSpawn(task)));
- });
-}
-
-function _Scheduler_rawSend(proc, msg)
-{
- proc.h.push(msg);
- _Scheduler_enqueue(proc);
-}
-
-var _Scheduler_send = F2(function(proc, msg)
-{
- return _Scheduler_binding(function(callback) {
- _Scheduler_rawSend(proc, msg);
- callback(_Scheduler_succeed(_Utils_Tuple0));
- });
-});
-
-function _Scheduler_kill(proc)
-{
- return _Scheduler_binding(function(callback) {
- var task = proc.f;
- if (task.$ === 2 && task.c)
- {
- task.c();
- }
-
- proc.f = null;
-
- callback(_Scheduler_succeed(_Utils_Tuple0));
- });
-}
-
-
-/* STEP PROCESSES
-
-type alias Process =
- { $ : tag
- , id : unique_id
- , root : Task
- , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack }
- , mailbox : [msg]
- }
-
-*/
-
-
-var _Scheduler_working = false;
-var _Scheduler_queue = [];
-
-
-function _Scheduler_enqueue(proc)
-{
- _Scheduler_queue.push(proc);
- if (_Scheduler_working)
- {
- return;
- }
- _Scheduler_working = true;
- while (proc = _Scheduler_queue.shift())
- {
- _Scheduler_step(proc);
- }
- _Scheduler_working = false;
-}
-
-
-function _Scheduler_step(proc)
-{
- while (proc.f)
- {
- var rootTag = proc.f.$;
- if (rootTag === 0 || rootTag === 1)
- {
- while (proc.g && proc.g.$ !== rootTag)
- {
- proc.g = proc.g.i;
- }
- if (!proc.g)
- {
- return;
- }
- proc.f = proc.g.b(proc.f.a);
- proc.g = proc.g.i;
- }
- else if (rootTag === 2)
- {
- proc.f.c = proc.f.b(function(newRoot) {
- proc.f = newRoot;
- _Scheduler_enqueue(proc);
- });
- return;
- }
- else if (rootTag === 5)
- {
- if (proc.h.length === 0)
- {
- return;
- }
- proc.f = proc.f.b(proc.h.shift());
- }
- else // if (rootTag === 3 || rootTag === 4)
- {
- proc.g = {
- $: rootTag === 3 ? 0 : 1,
- b: proc.f.b,
- i: proc.g
- };
- proc.f = proc.f.d;
- }
- }
-}
-
-
-
-function _Process_sleep(time)
-{
- return _Scheduler_binding(function(callback) {
- var id = setTimeout(function() {
- callback(_Scheduler_succeed(_Utils_Tuple0));
- }, time);
-
- return function() { clearTimeout(id); };
- });
-}
-
-
-
-
-// PROGRAMS
-
-
-var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args)
-{
- return _Platform_initialize(
- flagDecoder,
- args,
- impl.bJ,
- impl.b1,
- impl.b_,
- function() { return function() {} }
- );
-});
-
-
-
-// INITIALIZE A PROGRAM
-
-
-function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder)
-{
- var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined));
- elm$core$Result$isOk(result) || _Debug_crash(2, result.a);
- var managers = {};
- result = init(result.a);
- var model = result.a;
- var stepper = stepperBuilder(sendToApp, model);
- var ports = _Platform_setupEffects(managers, sendToApp);
-
- function sendToApp(msg, viewMetadata)
- {
- result = A2(update, msg, model);
- stepper(model = result.a, viewMetadata);
- _Platform_dispatchEffects(managers, result.b, subscriptions(model));
- }
-
- _Platform_dispatchEffects(managers, result.b, subscriptions(model));
-
- return ports ? { ports: ports } : {};
-}
-
-
-
-// TRACK PRELOADS
-//
-// This is used by code in elm/browser and elm/http
-// to register any HTTP requests that are triggered by init.
-//
-
-
-var _Platform_preload;
-
-
-function _Platform_registerPreload(url)
-{
- _Platform_preload.add(url);
-}
-
-
-
-// EFFECT MANAGERS
-
-
-var _Platform_effectManagers = {};
-
-
-function _Platform_setupEffects(managers, sendToApp)
-{
- var ports;
-
- // setup all necessary effect managers
- for (var key in _Platform_effectManagers)
- {
- var manager = _Platform_effectManagers[key];
-
- if (manager.a)
- {
- ports = ports || {};
- ports[key] = manager.a(key, sendToApp);
- }
-
- managers[key] = _Platform_instantiateManager(manager, sendToApp);
- }
-
- return ports;
-}
-
-
-function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap)
-{
- return {
- b: init,
- c: onEffects,
- d: onSelfMsg,
- e: cmdMap,
- f: subMap
- };
-}
-
-
-function _Platform_instantiateManager(info, sendToApp)
-{
- var router = {
- g: sendToApp,
- h: undefined
- };
-
- var onEffects = info.c;
- var onSelfMsg = info.d;
- var cmdMap = info.e;
- var subMap = info.f;
-
- function loop(state)
- {
- return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg)
- {
- var value = msg.a;
-
- if (msg.$ === 0)
- {
- return A3(onSelfMsg, router, value, state);
- }
-
- return cmdMap && subMap
- ? A4(onEffects, router, value.i, value.j, state)
- : A3(onEffects, router, cmdMap ? value.i : value.j, state);
- }));
- }
-
- return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b));
-}
-
-
-
-// ROUTING
-
-
-var _Platform_sendToApp = F2(function(router, msg)
-{
- return _Scheduler_binding(function(callback)
- {
- router.g(msg);
- callback(_Scheduler_succeed(_Utils_Tuple0));
- });
-});
-
-
-var _Platform_sendToSelf = F2(function(router, msg)
-{
- return A2(_Scheduler_send, router.h, {
- $: 0,
- a: msg
- });
-});
-
-
-
-// BAGS
-
-
-function _Platform_leaf(home)
-{
- return function(value)
- {
- return {
- $: 1,
- k: home,
- l: value
- };
- };
-}
-
-
-function _Platform_batch(list)
-{
- return {
- $: 2,
- m: list
- };
-}
-
-
-var _Platform_map = F2(function(tagger, bag)
-{
- return {
- $: 3,
- n: tagger,
- o: bag
- }
-});
-
-
-
-// PIPE BAGS INTO EFFECT MANAGERS
-
-
-function _Platform_dispatchEffects(managers, cmdBag, subBag)
-{
- var effectsDict = {};
- _Platform_gatherEffects(true, cmdBag, effectsDict, null);
- _Platform_gatherEffects(false, subBag, effectsDict, null);
-
- for (var home in managers)
- {
- _Scheduler_rawSend(managers[home], {
- $: 'fx',
- a: effectsDict[home] || { i: _List_Nil, j: _List_Nil }
- });
- }
-}
-
-
-function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers)
-{
- switch (bag.$)
- {
- case 1:
- var home = bag.k;
- var effect = _Platform_toEffect(isCmd, home, taggers, bag.l);
- effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]);
- return;
-
- case 2:
- for (var list = bag.m; list.b; list = list.b) // WHILE_CONS
- {
- _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers);
- }
- return;
-
- case 3:
- _Platform_gatherEffects(isCmd, bag.o, effectsDict, {
- p: bag.n,
- q: taggers
- });
- return;
- }
-}
-
-
-function _Platform_toEffect(isCmd, home, taggers, value)
-{
- function applyTaggers(x)
- {
- for (var temp = taggers; temp; temp = temp.q)
- {
- x = temp.p(x);
- }
- return x;
- }
-
- var map = isCmd
- ? _Platform_effectManagers[home].e
- : _Platform_effectManagers[home].f;
-
- return A2(map, applyTaggers, value)
-}
-
-
-function _Platform_insert(isCmd, newEffect, effects)
-{
- effects = effects || { i: _List_Nil, j: _List_Nil };
-
- isCmd
- ? (effects.i = _List_Cons(newEffect, effects.i))
- : (effects.j = _List_Cons(newEffect, effects.j));
-
- return effects;
-}
-
-
-
-// PORTS
-
-
-function _Platform_checkPortName(name)
-{
- if (_Platform_effectManagers[name])
- {
- _Debug_crash(3, name)
- }
-}
-
-
-
-// OUTGOING PORTS
-
-
-function _Platform_outgoingPort(name, converter)
-{
- _Platform_checkPortName(name);
- _Platform_effectManagers[name] = {
- e: _Platform_outgoingPortMap,
- r: converter,
- a: _Platform_setupOutgoingPort
- };
- return _Platform_leaf(name);
-}
-
-
-var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; });
-
-
-function _Platform_setupOutgoingPort(name)
-{
- var subs = [];
- var converter = _Platform_effectManagers[name].r;
-
- // CREATE MANAGER
-
- var init = _Process_sleep(0);
-
- _Platform_effectManagers[name].b = init;
- _Platform_effectManagers[name].c = F3(function(router, cmdList, state)
- {
- for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS
- {
- // grab a separate reference to subs in case unsubscribe is called
- var currentSubs = subs;
- var value = _Json_unwrap(converter(cmdList.a));
- for (var i = 0; i < currentSubs.length; i++)
- {
- currentSubs[i](value);
- }
- }
- return init;
- });
-
- // PUBLIC API
-
- function subscribe(callback)
- {
- subs.push(callback);
- }
-
- function unsubscribe(callback)
- {
- // copy subs into a new array in case unsubscribe is called within a
- // subscribed callback
- subs = subs.slice();
- var index = subs.indexOf(callback);
- if (index >= 0)
- {
- subs.splice(index, 1);
- }
- }
-
- return {
- subscribe: subscribe,
- unsubscribe: unsubscribe
- };
-}
-
-
-
-// INCOMING PORTS
-
-
-function _Platform_incomingPort(name, converter)
-{
- _Platform_checkPortName(name);
- _Platform_effectManagers[name] = {
- f: _Platform_incomingPortMap,
- r: converter,
- a: _Platform_setupIncomingPort
- };
- return _Platform_leaf(name);
-}
-
-
-var _Platform_incomingPortMap = F2(function(tagger, finalTagger)
-{
- return function(value)
- {
- return tagger(finalTagger(value));
- };
-});
-
-
-function _Platform_setupIncomingPort(name, sendToApp)
-{
- var subs = _List_Nil;
- var converter = _Platform_effectManagers[name].r;
-
- // CREATE MANAGER
-
- var init = _Scheduler_succeed(null);
-
- _Platform_effectManagers[name].b = init;
- _Platform_effectManagers[name].c = F3(function(router, subList, state)
- {
- subs = subList;
- return init;
- });
-
- // PUBLIC API
-
- function send(incomingValue)
- {
- var result = A2(_Json_run, converter, _Json_wrap(incomingValue));
-
- elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a);
-
- var value = result.a;
- for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS
- {
- sendToApp(temp.a(value));
- }
- }
-
- return { send: send };
-}
-
-
-
-// EXPORT ELM MODULES
-//
-// Have DEBUG and PROD versions so that we can (1) give nicer errors in
-// debug mode and (2) not pay for the bits needed for that in prod mode.
-//
-
-
-function _Platform_export(exports)
-{
- scope['Elm']
- ? _Platform_mergeExportsProd(scope['Elm'], exports)
- : scope['Elm'] = exports;
-}
-
-
-function _Platform_mergeExportsProd(obj, exports)
-{
- for (var name in exports)
- {
- (name in obj)
- ? (name == 'init')
- ? _Debug_crash(6)
- : _Platform_mergeExportsProd(obj[name], exports[name])
- : (obj[name] = exports[name]);
- }
-}
-
-
-function _Platform_export_UNUSED(exports)
-{
- scope['Elm']
- ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports)
- : scope['Elm'] = exports;
-}
-
-
-function _Platform_mergeExportsDebug(moduleName, obj, exports)
-{
- for (var name in exports)
- {
- (name in obj)
- ? (name == 'init')
- ? _Debug_crash(6, moduleName)
- : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name])
- : (obj[name] = exports[name]);
- }
-}
-
-
-
-var _String_cons = F2(function(chr, str)
-{
- return chr + str;
-});
-
-function _String_uncons(string)
-{
- var word = string.charCodeAt(0);
- return word
- ? elm$core$Maybe$Just(
- 0xD800 <= word && word <= 0xDBFF
- ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2))
- : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1))
- )
- : elm$core$Maybe$Nothing;
-}
-
-var _String_append = F2(function(a, b)
-{
- return a + b;
-});
-
-function _String_length(str)
-{
- return str.length;
-}
-
-var _String_map = F2(function(func, string)
-{
- var len = string.length;
- var array = new Array(len);
- var i = 0;
- while (i < len)
- {
- var word = string.charCodeAt(i);
- if (0xD800 <= word && word <= 0xDBFF)
- {
- array[i] = func(_Utils_chr(string[i] + string[i+1]));
- i += 2;
- continue;
- }
- array[i] = func(_Utils_chr(string[i]));
- i++;
- }
- return array.join('');
-});
-
-var _String_filter = F2(function(isGood, str)
-{
- var arr = [];
- var len = str.length;
- var i = 0;
- while (i < len)
- {
- var char = str[i];
- var word = str.charCodeAt(i);
- i++;
- if (0xD800 <= word && word <= 0xDBFF)
- {
- char += str[i];
- i++;
- }
-
- if (isGood(_Utils_chr(char)))
- {
- arr.push(char);
- }
- }
- return arr.join('');
-});
-
-function _String_reverse(str)
-{
- var len = str.length;
- var arr = new Array(len);
- var i = 0;
- while (i < len)
- {
- var word = str.charCodeAt(i);
- if (0xD800 <= word && word <= 0xDBFF)
- {
- arr[len - i] = str[i + 1];
- i++;
- arr[len - i] = str[i - 1];
- i++;
- }
- else
- {
- arr[len - i] = str[i];
- i++;
- }
- }
- return arr.join('');
-}
-
-var _String_foldl = F3(function(func, state, string)
-{
- var len = string.length;
- var i = 0;
- while (i < len)
- {
- var char = string[i];
- var word = string.charCodeAt(i);
- i++;
- if (0xD800 <= word && word <= 0xDBFF)
- {
- char += string[i];
- i++;
- }
- state = A2(func, _Utils_chr(char), state);
- }
- return state;
-});
-
-var _String_foldr = F3(function(func, state, string)
-{
- var i = string.length;
- while (i--)
- {
- var char = string[i];
- var word = string.charCodeAt(i);
- if (0xDC00 <= word && word <= 0xDFFF)
- {
- i--;
- char = string[i] + char;
- }
- state = A2(func, _Utils_chr(char), state);
- }
- return state;
-});
-
-var _String_split = F2(function(sep, str)
-{
- return str.split(sep);
-});
-
-var _String_join = F2(function(sep, strs)
-{
- return strs.join(sep);
-});
-
-var _String_slice = F3(function(start, end, str) {
- return str.slice(start, end);
-});
-
-function _String_trim(str)
-{
- return str.trim();
-}
-
-function _String_trimLeft(str)
-{
- return str.replace(/^\s+/, '');
-}
-
-function _String_trimRight(str)
-{
- return str.replace(/\s+$/, '');
-}
-
-function _String_words(str)
-{
- return _List_fromArray(str.trim().split(/\s+/g));
-}
-
-function _String_lines(str)
-{
- return _List_fromArray(str.split(/\r\n|\r|\n/g));
-}
-
-function _String_toUpper(str)
-{
- return str.toUpperCase();
-}
-
-function _String_toLower(str)
-{
- return str.toLowerCase();
-}
-
-var _String_any = F2(function(isGood, string)
-{
- var i = string.length;
- while (i--)
- {
- var char = string[i];
- var word = string.charCodeAt(i);
- if (0xDC00 <= word && word <= 0xDFFF)
- {
- i--;
- char = string[i] + char;
- }
- if (isGood(_Utils_chr(char)))
- {
- return true;
- }
- }
- return false;
-});
-
-var _String_all = F2(function(isGood, string)
-{
- var i = string.length;
- while (i--)
- {
- var char = string[i];
- var word = string.charCodeAt(i);
- if (0xDC00 <= word && word <= 0xDFFF)
- {
- i--;
- char = string[i] + char;
- }
- if (!isGood(_Utils_chr(char)))
- {
- return false;
- }
- }
- return true;
-});
-
-var _String_contains = F2(function(sub, str)
-{
- return str.indexOf(sub) > -1;
-});
-
-var _String_startsWith = F2(function(sub, str)
-{
- return str.indexOf(sub) === 0;
-});
-
-var _String_endsWith = F2(function(sub, str)
-{
- return str.length >= sub.length &&
- str.lastIndexOf(sub) === str.length - sub.length;
-});
-
-var _String_indexes = F2(function(sub, str)
-{
- var subLen = sub.length;
-
- if (subLen < 1)
- {
- return _List_Nil;
- }
-
- var i = 0;
- var is = [];
-
- while ((i = str.indexOf(sub, i)) > -1)
- {
- is.push(i);
- i = i + subLen;
- }
-
- return _List_fromArray(is);
-});
-
-
-// TO STRING
-
-function _String_fromNumber(number)
-{
- return number + '';
-}
-
-
-// INT CONVERSIONS
-
-function _String_toInt(str)
-{
- var total = 0;
- var code0 = str.charCodeAt(0);
- var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0;
-
- for (var i = start; i < str.length; ++i)
- {
- var code = str.charCodeAt(i);
- if (code < 0x30 || 0x39 < code)
- {
- return elm$core$Maybe$Nothing;
- }
- total = 10 * total + code - 0x30;
- }
-
- return i == start
- ? elm$core$Maybe$Nothing
- : elm$core$Maybe$Just(code0 == 0x2D ? -total : total);
-}
-
-
-// FLOAT CONVERSIONS
-
-function _String_toFloat(s)
-{
- // check if it is a hex, octal, or binary number
- if (s.length === 0 || /[\sxbo]/.test(s))
- {
- return elm$core$Maybe$Nothing;
- }
- var n = +s;
- // faster isNaN check
- return n === n ? elm$core$Maybe$Just(n) : elm$core$Maybe$Nothing;
-}
-
-function _String_fromList(chars)
-{
- return _List_toArray(chars).join('');
-}
-
-
-
-
-// SEND REQUEST
-
-var _Http_toTask = F2(function(request, maybeProgress)
-{
- return _Scheduler_binding(function(callback)
- {
- var xhr = new XMLHttpRequest();
-
- _Http_configureProgress(xhr, maybeProgress);
-
- xhr.addEventListener('error', function() {
- callback(_Scheduler_fail(elm$http$Http$NetworkError));
- });
- xhr.addEventListener('timeout', function() {
- callback(_Scheduler_fail(elm$http$Http$Timeout));
- });
- xhr.addEventListener('load', function() {
- callback(_Http_handleResponse(xhr, request.ab.a));
- });
-
- try
- {
- xhr.open(request.ad, request.b2, true);
- }
- catch (e)
- {
- return callback(_Scheduler_fail(elm$http$Http$BadUrl(request.b2)));
- }
-
- _Http_configureRequest(xhr, request);
-
- var body = request.bm;
- xhr.send(elm$http$Http$Internal$isStringBody(body)
- ? (xhr.setRequestHeader('Content-Type', body.a), body.b)
- : body.a
- );
-
- return function() { xhr.abort(); };
- });
-});
-
-function _Http_configureProgress(xhr, maybeProgress)
-{
- if (!elm$core$Maybe$isJust(maybeProgress))
- {
- return;
- }
-
- xhr.addEventListener('progress', function(event) {
- if (!event.lengthComputable)
- {
- return;
- }
- _Scheduler_rawSpawn(maybeProgress.a({
- bn: event.loaded,
- bo: event.total
- }));
- });
-}
-
-function _Http_configureRequest(xhr, request)
-{
- for (var headers = request.V; headers.b; headers = headers.b) // WHILE_CONS
- {
- xhr.setRequestHeader(headers.a.a, headers.a.b);
- }
-
- xhr.responseType = request.ab.b;
- xhr.withCredentials = request.aD;
-
- elm$core$Maybe$isJust(request.aC) && (xhr.timeout = request.aC.a);
-}
-
-
-// RESPONSES
-
-function _Http_handleResponse(xhr, responseToResult)
-{
- var response = _Http_toResponse(xhr);
-
- if (xhr.status < 200 || 300 <= xhr.status)
- {
- response.body = xhr.responseText;
- return _Scheduler_fail(elm$http$Http$BadStatus(response));
- }
-
- var result = responseToResult(response);
-
- if (elm$core$Result$isOk(result))
- {
- return _Scheduler_succeed(result.a);
- }
- else
- {
- response.body = xhr.responseText;
- return _Scheduler_fail(A2(elm$http$Http$BadPayload, result.a, response));
- }
-}
-
-function _Http_toResponse(xhr)
-{
- return {
- b2: xhr.responseURL,
- bb: { br: xhr.status, bN: xhr.statusText },
- V: _Http_parseHeaders(xhr.getAllResponseHeaders()),
- bm: xhr.response
- };
-}
-
-function _Http_parseHeaders(rawHeaders)
-{
- var headers = elm$core$Dict$empty;
-
- if (!rawHeaders)
- {
- return headers;
- }
-
- var headerPairs = rawHeaders.split('\u000d\u000a');
- for (var i = headerPairs.length; i--; )
- {
- var headerPair = headerPairs[i];
- var index = headerPair.indexOf('\u003a\u0020');
- if (index > 0)
- {
- var key = headerPair.substring(0, index);
- var value = headerPair.substring(index + 2);
-
- headers = A3(elm$core$Dict$update, key, function(oldValue) {
- return elm$core$Maybe$Just(elm$core$Maybe$isJust(oldValue)
- ? value + ', ' + oldValue.a
- : value
- );
- }, headers);
- }
- }
-
- return headers;
-}
-
-
-// EXPECTORS
-
-function _Http_expectStringResponse(responseToResult)
-{
- return {
- $: 0,
- b: 'text',
- a: responseToResult
- };
-}
-
-var _Http_mapExpect = F2(function(func, expect)
-{
- return {
- $: 0,
- b: expect.b,
- a: function(response) {
- var convertedResponse = expect.a(response);
- return A2(elm$core$Result$map, func, convertedResponse);
- }
- };
-});
-
-
-// BODY
-
-function _Http_multipart(parts)
-{
-
-
- for (var formData = new FormData(); parts.b; parts = parts.b) // WHILE_CONS
- {
- var part = parts.a;
- formData.append(part.a, part.b);
- }
-
- return elm$http$Http$Internal$FormDataBody(formData);
-}
-
-
-
-function _Char_toCode(char)
-{
- var code = char.charCodeAt(0);
- if (0xD800 <= code && code <= 0xDBFF)
- {
- return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000
- }
- return code;
-}
-
-function _Char_fromCode(code)
-{
- return _Utils_chr(
- (code < 0 || 0x10FFFF < code)
- ? '\uFFFD'
- :
- (code <= 0xFFFF)
- ? String.fromCharCode(code)
- :
- (code -= 0x10000,
- String.fromCharCode(Math.floor(code / 0x400) + 0xD800)
- +
- String.fromCharCode(code % 0x400 + 0xDC00)
- )
- );
-}
-
-function _Char_toUpper(char)
-{
- return _Utils_chr(char.toUpperCase());
-}
-
-function _Char_toLower(char)
-{
- return _Utils_chr(char.toLowerCase());
-}
-
-function _Char_toLocaleUpper(char)
-{
- return _Utils_chr(char.toLocaleUpperCase());
-}
-
-function _Char_toLocaleLower(char)
-{
- return _Utils_chr(char.toLocaleLowerCase());
-}
-
-
-
-
-// STRINGS
-
-
-var _Parser_isSubString = F5(function(smallString, offset, row, col, bigString)
-{
- var smallLength = smallString.length;
- var isGood = offset + smallLength <= bigString.length;
-
- for (var i = 0; isGood && i < smallLength; )
- {
- var code = bigString.charCodeAt(offset);
- isGood =
- smallString[i++] === bigString[offset++]
- && (
- code === 0x000A /* \n */
- ? ( row++, col=1 )
- : ( col++, (code & 0xF800) === 0xD800 ? smallString[i++] === bigString[offset++] : 1 )
- )
- }
-
- return _Utils_Tuple3(isGood ? offset : -1, row, col);
-});
-
-
-
-// CHARS
-
-
-var _Parser_isSubChar = F3(function(predicate, offset, string)
-{
- return (
- string.length <= offset
- ? -1
- :
- (string.charCodeAt(offset) & 0xF800) === 0xD800
- ? (predicate(_Utils_chr(string.substr(offset, 2))) ? offset + 2 : -1)
- :
- (predicate(_Utils_chr(string[offset]))
- ? ((string[offset] === '\n') ? -2 : (offset + 1))
- : -1
- )
- );
-});
-
-
-var _Parser_isAsciiCode = F3(function(code, offset, string)
-{
- return string.charCodeAt(offset) === code;
-});
-
-
-
-// NUMBERS
-
-
-var _Parser_chompBase10 = F2(function(offset, string)
-{
- for (; offset < string.length; offset++)
- {
- var code = string.charCodeAt(offset);
- if (code < 0x30 || 0x39 < code)
- {
- return offset;
- }
- }
- return offset;
-});
-
-
-var _Parser_consumeBase = F3(function(base, offset, string)
-{
- for (var total = 0; offset < string.length; offset++)
- {
- var digit = string.charCodeAt(offset) - 0x30;
- if (digit < 0 || base <= digit) break;
- total = base * total + digit;
- }
- return _Utils_Tuple2(offset, total);
-});
-
-
-var _Parser_consumeBase16 = F2(function(offset, string)
-{
- for (var total = 0; offset < string.length; offset++)
- {
- var code = string.charCodeAt(offset);
- if (0x30 <= code && code <= 0x39)
- {
- total = 16 * total + code - 0x30;
- }
- else if (0x41 <= code && code <= 0x46)
- {
- total = 16 * total + code - 55;
- }
- else if (0x61 <= code && code <= 0x66)
- {
- total = 16 * total + code - 87;
- }
- else
- {
- break;
- }
- }
- return _Utils_Tuple2(offset, total);
-});
-
-
-
-// FIND STRING
-
-
-var _Parser_findSubString = F5(function(smallString, offset, row, col, bigString)
-{
- var newOffset = bigString.indexOf(smallString, offset);
- var target = newOffset < 0 ? bigString.length : newOffset + smallString.length;
-
- while (offset < target)
- {
- var code = bigString.charCodeAt(offset++);
- code === 0x000A /* \n */
- ? ( col=1, row++ )
- : ( col++, (code & 0xF800) === 0xD800 && offset++ )
- }
-
- return _Utils_Tuple3(newOffset, row, col);
-});
-
-
-
-var _Bitwise_and = F2(function(a, b)
-{
- return a & b;
-});
-
-var _Bitwise_or = F2(function(a, b)
-{
- return a | b;
-});
-
-var _Bitwise_xor = F2(function(a, b)
-{
- return a ^ b;
-});
-
-function _Bitwise_complement(a)
-{
- return ~a;
-};
-
-var _Bitwise_shiftLeftBy = F2(function(offset, a)
-{
- return a << offset;
-});
-
-var _Bitwise_shiftRightBy = F2(function(offset, a)
-{
- return a >> offset;
-});
-
-var _Bitwise_shiftRightZfBy = F2(function(offset, a)
-{
- return a >>> offset;
-});
-
-
-
-
-// HELPERS
-
-
-var _VirtualDom_divertHrefToApp;
-
-var _VirtualDom_doc = typeof document !== 'undefined' ? document : {};
-
-
-function _VirtualDom_appendChild(parent, child)
-{
- parent.appendChild(child);
-}
-
-var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args)
-{
- // NOTE: this function needs _Platform_export available to work
-
- /**/
- var node = args['node'];
- //*/
- /**_UNUSED/
- var node = args && args['node'] ? args['node'] : _Debug_crash(0);
- //*/
-
- node.parentNode.replaceChild(
- _VirtualDom_render(virtualNode, function() {}),
- node
- );
-
- return {};
-});
-
-
-
-// TEXT
-
-
-function _VirtualDom_text(string)
-{
- return {
- $: 0,
- a: string
- };
-}
-
-
-
-// NODE
-
-
-var _VirtualDom_nodeNS = F2(function(namespace, tag)
-{
- return F2(function(factList, kidList)
- {
- for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
- {
- var kid = kidList.a;
- descendantsCount += (kid.b || 0);
- kids.push(kid);
- }
- descendantsCount += kids.length;
-
- return {
- $: 1,
- c: tag,
- d: _VirtualDom_organizeFacts(factList),
- e: kids,
- f: namespace,
- b: descendantsCount
- };
- });
-});
-
-
-var _VirtualDom_node = _VirtualDom_nodeNS(undefined);
-
-
-
-// KEYED NODE
-
-
-var _VirtualDom_keyedNodeNS = F2(function(namespace, tag)
-{
- return F2(function(factList, kidList)
- {
- for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS
- {
- var kid = kidList.a;
- descendantsCount += (kid.b.b || 0);
- kids.push(kid);
- }
- descendantsCount += kids.length;
-
- return {
- $: 2,
- c: tag,
- d: _VirtualDom_organizeFacts(factList),
- e: kids,
- f: namespace,
- b: descendantsCount
- };
- });
-});
-
-
-var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined);
-
-
-
-// CUSTOM
-
-
-function _VirtualDom_custom(factList, model, render, diff)
-{
- return {
- $: 3,
- d: _VirtualDom_organizeFacts(factList),
- g: model,
- h: render,
- i: diff
- };
-}
-
-
-
-// MAP
-
-
-var _VirtualDom_map = F2(function(tagger, node)
-{
- return {
- $: 4,
- j: tagger,
- k: node,
- b: 1 + (node.b || 0)
- };
-});
-
-
-
-// LAZY
-
-
-function _VirtualDom_thunk(refs, thunk)
-{
- return {
- $: 5,
- l: refs,
- m: thunk,
- k: undefined
- };
-}
-
-var _VirtualDom_lazy = F2(function(func, a)
-{
- return _VirtualDom_thunk([func, a], function() {
- return func(a);
- });
-});
-
-var _VirtualDom_lazy2 = F3(function(func, a, b)
-{
- return _VirtualDom_thunk([func, a, b], function() {
- return A2(func, a, b);
- });
-});
-
-var _VirtualDom_lazy3 = F4(function(func, a, b, c)
-{
- return _VirtualDom_thunk([func, a, b, c], function() {
- return A3(func, a, b, c);
- });
-});
-
-var _VirtualDom_lazy4 = F5(function(func, a, b, c, d)
-{
- return _VirtualDom_thunk([func, a, b, c, d], function() {
- return A4(func, a, b, c, d);
- });
-});
-
-var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e)
-{
- return _VirtualDom_thunk([func, a, b, c, d, e], function() {
- return A5(func, a, b, c, d, e);
- });
-});
-
-var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f)
-{
- return _VirtualDom_thunk([func, a, b, c, d, e, f], function() {
- return A6(func, a, b, c, d, e, f);
- });
-});
-
-var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g)
-{
- return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() {
- return A7(func, a, b, c, d, e, f, g);
- });
-});
-
-var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h)
-{
- return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() {
- return A8(func, a, b, c, d, e, f, g, h);
- });
-});
-
-
-
-// FACTS
-
-
-var _VirtualDom_on = F2(function(key, handler)
-{
- return {
- $: 'a0',
- n: key,
- o: handler
- };
-});
-var _VirtualDom_style = F2(function(key, value)
-{
- return {
- $: 'a1',
- n: key,
- o: value
- };
-});
-var _VirtualDom_property = F2(function(key, value)
-{
- return {
- $: 'a2',
- n: key,
- o: value
- };
-});
-var _VirtualDom_attribute = F2(function(key, value)
-{
- return {
- $: 'a3',
- n: key,
- o: value
- };
-});
-var _VirtualDom_attributeNS = F3(function(namespace, key, value)
-{
- return {
- $: 'a4',
- n: key,
- o: { f: namespace, o: value }
- };
-});
-
-
-
-// XSS ATTACK VECTOR CHECKS
-
-
-function _VirtualDom_noScript(tag)
-{
- return tag == 'script' ? 'p' : tag;
-}
-
-function _VirtualDom_noOnOrFormAction(key)
-{
- return /^(on|formAction$)/i.test(key) ? 'data-' + key : key;
-}
-
-function _VirtualDom_noInnerHtmlOrFormAction(key)
-{
- return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key;
-}
-
-function _VirtualDom_noJavaScriptUri(value)
-{
- return /^\s*javascript:/i.test(value) ? '' : value;
-}
-
-function _VirtualDom_noJavaScriptUri_UNUSED(value)
-{
- return /^\s*javascript:/i.test(value)
- ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
- : value;
-}
-
-function _VirtualDom_noJavaScriptOrHtmlUri(value)
-{
- return /^\s*(javascript:|data:text\/html)/i.test(value) ? '' : value;
-}
-
-function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value)
-{
- return /^\s*(javascript:|data:text\/html)/i.test(value)
- ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'
- : value;
-}
-
-
-
-// MAP FACTS
-
-
-var _VirtualDom_mapAttribute = F2(function(func, attr)
-{
- return (attr.$ === 'a0')
- ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o))
- : attr;
-});
-
-function _VirtualDom_mapHandler(func, handler)
-{
- var tag = elm$virtual_dom$VirtualDom$toHandlerInt(handler);
-
- // 0 = Normal
- // 1 = MayStopPropagation
- // 2 = MayPreventDefault
- // 3 = Custom
-
- return {
- $: handler.$,
- a:
- !tag
- ? A2(elm$json$Json$Decode$map, func, handler.a)
- :
- A3(elm$json$Json$Decode$map2,
- tag < 3
- ? _VirtualDom_mapEventTuple
- : _VirtualDom_mapEventRecord,
- elm$json$Json$Decode$succeed(func),
- handler.a
- )
- };
-}
-
-var _VirtualDom_mapEventTuple = F2(function(func, tuple)
-{
- return _Utils_Tuple2(func(tuple.a), tuple.b);
-});
-
-var _VirtualDom_mapEventRecord = F2(function(func, record)
-{
- return {
- bN: func(record.bN),
- aA: record.aA,
- ay: record.ay
- }
-});
-
-
-
-// ORGANIZE FACTS
-
-
-function _VirtualDom_organizeFacts(factList)
-{
- for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS
- {
- var entry = factList.a;
-
- var tag = entry.$;
- var key = entry.n;
- var value = entry.o;
-
- if (tag === 'a2')
- {
- (key === 'className')
- ? _VirtualDom_addClass(facts, key, _Json_unwrap(value))
- : facts[key] = _Json_unwrap(value);
-
- continue;
- }
-
- var subFacts = facts[tag] || (facts[tag] = {});
- (tag === 'a3' && key === 'class')
- ? _VirtualDom_addClass(subFacts, key, value)
- : subFacts[key] = value;
- }
-
- return facts;
-}
-
-function _VirtualDom_addClass(object, key, newClass)
-{
- var classes = object[key];
- object[key] = classes ? classes + ' ' + newClass : newClass;
-}
-
-
-
-// RENDER
-
-
-function _VirtualDom_render(vNode, eventNode)
-{
- var tag = vNode.$;
-
- if (tag === 5)
- {
- return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode);
- }
-
- if (tag === 0)
- {
- return _VirtualDom_doc.createTextNode(vNode.a);
- }
-
- if (tag === 4)
- {
- var subNode = vNode.k;
- var tagger = vNode.j;
-
- while (subNode.$ === 4)
- {
- typeof tagger !== 'object'
- ? tagger = [tagger, subNode.j]
- : tagger.push(subNode.j);
-
- subNode = subNode.k;
- }
-
- var subEventRoot = { j: tagger, p: eventNode };
- var domNode = _VirtualDom_render(subNode, subEventRoot);
- domNode.elm_event_node_ref = subEventRoot;
- return domNode;
- }
-
- if (tag === 3)
- {
- var domNode = vNode.h(vNode.g);
- _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
- return domNode;
- }
-
- // at this point `tag` must be 1 or 2
-
- var domNode = vNode.f
- ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c)
- : _VirtualDom_doc.createElement(vNode.c);
-
- if (_VirtualDom_divertHrefToApp && vNode.c == 'a')
- {
- domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode));
- }
-
- _VirtualDom_applyFacts(domNode, eventNode, vNode.d);
-
- for (var kids = vNode.e, i = 0; i < kids.length; i++)
- {
- _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode));
- }
-
- return domNode;
-}
-
-
-
-// APPLY FACTS
-
-
-function _VirtualDom_applyFacts(domNode, eventNode, facts)
-{
- for (var key in facts)
- {
- var value = facts[key];
-
- key === 'a1'
- ? _VirtualDom_applyStyles(domNode, value)
- :
- key === 'a0'
- ? _VirtualDom_applyEvents(domNode, eventNode, value)
- :
- key === 'a3'
- ? _VirtualDom_applyAttrs(domNode, value)
- :
- key === 'a4'
- ? _VirtualDom_applyAttrsNS(domNode, value)
- :
- (key !== 'value' || domNode[key] !== value) && (domNode[key] = value);
- }
-}
-
-
-
-// APPLY STYLES
-
-
-function _VirtualDom_applyStyles(domNode, styles)
-{
- var domNodeStyle = domNode.style;
-
- for (var key in styles)
- {
- domNodeStyle[key] = styles[key];
- }
-}
-
-
-
-// APPLY ATTRS
-
-
-function _VirtualDom_applyAttrs(domNode, attrs)
-{
- for (var key in attrs)
- {
- var value = attrs[key];
- value
- ? domNode.setAttribute(key, value)
- : domNode.removeAttribute(key);
- }
-}
-
-
-
-// APPLY NAMESPACED ATTRS
-
-
-function _VirtualDom_applyAttrsNS(domNode, nsAttrs)
-{
- for (var key in nsAttrs)
- {
- var pair = nsAttrs[key];
- var namespace = pair.f;
- var value = pair.o;
-
- value
- ? domNode.setAttributeNS(namespace, key, value)
- : domNode.removeAttributeNS(namespace, key);
- }
-}
-
-
-
-// APPLY EVENTS
-
-
-function _VirtualDom_applyEvents(domNode, eventNode, events)
-{
- var allCallbacks = domNode.elmFs || (domNode.elmFs = {});
-
- for (var key in events)
- {
- var newHandler = events[key];
- var oldCallback = allCallbacks[key];
-
- if (!newHandler)
- {
- domNode.removeEventListener(key, oldCallback);
- allCallbacks[key] = undefined;
- continue;
- }
-
- if (oldCallback)
- {
- var oldHandler = oldCallback.q;
- if (oldHandler.$ === newHandler.$)
- {
- oldCallback.q = newHandler;
- continue;
- }
- domNode.removeEventListener(key, oldCallback);
- }
-
- oldCallback = _VirtualDom_makeCallback(eventNode, newHandler);
- domNode.addEventListener(key, oldCallback,
- _VirtualDom_passiveSupported
- && { passive: elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 }
- );
- allCallbacks[key] = oldCallback;
- }
-}
-
-
-
-// PASSIVE EVENTS
-
-
-var _VirtualDom_passiveSupported;
-
-try
-{
- window.addEventListener('t', null, Object.defineProperty({}, 'passive', {
- get: function() { _VirtualDom_passiveSupported = true; }
- }));
-}
-catch(e) {}
-
-
-
-// EVENT HANDLERS
-
-
-function _VirtualDom_makeCallback(eventNode, initialHandler)
-{
- function callback(event)
- {
- var handler = callback.q;
- var result = _Json_runHelp(handler.a, event);
-
- if (!elm$core$Result$isOk(result))
- {
- return;
- }
-
- var tag = elm$virtual_dom$VirtualDom$toHandlerInt(handler);
-
- // 0 = Normal
- // 1 = MayStopPropagation
- // 2 = MayPreventDefault
- // 3 = Custom
-
- var value = result.a;
- var message = !tag ? value : tag < 3 ? value.a : value.bN;
- var stopPropagation = tag == 1 ? value.b : tag == 3 && value.aA;
- var currentEventNode = (
- stopPropagation && event.stopPropagation(),
- (tag == 2 ? value.b : tag == 3 && value.ay) && event.preventDefault(),
- eventNode
- );
- var tagger;
- var i;
- while (tagger = currentEventNode.j)
- {
- if (typeof tagger == 'function')
- {
- message = tagger(message);
- }
- else
- {
- for (var i = tagger.length; i--; )
- {
- message = tagger[i](message);
- }
- }
- currentEventNode = currentEventNode.p;
- }
- currentEventNode(message, stopPropagation); // stopPropagation implies isSync
- }
-
- callback.q = initialHandler;
-
- return callback;
-}
-
-function _VirtualDom_equalEvents(x, y)
-{
- return x.$ == y.$ && _Json_equality(x.a, y.a);
-}
-
-
-
-// DIFF
-
-
-// TODO: Should we do patches like in iOS?
-//
-// type Patch
-// = At Int Patch
-// | Batch (List Patch)
-// | Change ...
-//
-// How could it not be better?
-//
-function _VirtualDom_diff(x, y)
-{
- var patches = [];
- _VirtualDom_diffHelp(x, y, patches, 0);
- return patches;
-}
-
-
-function _VirtualDom_pushPatch(patches, type, index, data)
-{
- var patch = {
- $: type,
- r: index,
- s: data,
- t: undefined,
- u: undefined
- };
- patches.push(patch);
- return patch;
-}
-
-
-function _VirtualDom_diffHelp(x, y, patches, index)
-{
- if (x === y)
- {
- return;
- }
-
- var xType = x.$;
- var yType = y.$;
-
- // Bail if you run into different types of nodes. Implies that the
- // structure has changed significantly and it's not worth a diff.
- if (xType !== yType)
- {
- if (xType === 1 && yType === 2)
- {
- y = _VirtualDom_dekey(y);
- yType = 1;
- }
- else
- {
- _VirtualDom_pushPatch(patches, 0, index, y);
- return;
- }
- }
-
- // Now we know that both nodes are the same $.
- switch (yType)
- {
- case 5:
- var xRefs = x.l;
- var yRefs = y.l;
- var i = xRefs.length;
- var same = i === yRefs.length;
- while (same && i--)
- {
- same = xRefs[i] === yRefs[i];
- }
- if (same)
- {
- y.k = x.k;
- return;
- }
- y.k = y.m();
- var subPatches = [];
- _VirtualDom_diffHelp(x.k, y.k, subPatches, 0);
- subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches);
- return;
-
- case 4:
- // gather nested taggers
- var xTaggers = x.j;
- var yTaggers = y.j;
- var nesting = false;
-
- var xSubNode = x.k;
- while (xSubNode.$ === 4)
- {
- nesting = true;
-
- typeof xTaggers !== 'object'
- ? xTaggers = [xTaggers, xSubNode.j]
- : xTaggers.push(xSubNode.j);
-
- xSubNode = xSubNode.k;
- }
-
- var ySubNode = y.k;
- while (ySubNode.$ === 4)
- {
- nesting = true;
-
- typeof yTaggers !== 'object'
- ? yTaggers = [yTaggers, ySubNode.j]
- : yTaggers.push(ySubNode.j);
-
- ySubNode = ySubNode.k;
- }
-
- // Just bail if different numbers of taggers. This implies the
- // structure of the virtual DOM has changed.
- if (nesting && xTaggers.length !== yTaggers.length)
- {
- _VirtualDom_pushPatch(patches, 0, index, y);
- return;
- }
-
- // check if taggers are "the same"
- if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers)
- {
- _VirtualDom_pushPatch(patches, 2, index, yTaggers);
- }
-
- // diff everything below the taggers
- _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1);
- return;
-
- case 0:
- if (x.a !== y.a)
- {
- _VirtualDom_pushPatch(patches, 3, index, y.a);
- }
- return;
-
- case 1:
- _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids);
- return;
-
- case 2:
- _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids);
- return;
-
- case 3:
- if (x.h !== y.h)
- {
- _VirtualDom_pushPatch(patches, 0, index, y);
- return;
- }
-
- var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
- factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
-
- var patch = y.i(x.g, y.g);
- patch && _VirtualDom_pushPatch(patches, 5, index, patch);
-
- return;
- }
-}
-
-// assumes the incoming arrays are the same length
-function _VirtualDom_pairwiseRefEqual(as, bs)
-{
- for (var i = 0; i < as.length; i++)
- {
- if (as[i] !== bs[i])
- {
- return false;
- }
- }
-
- return true;
-}
-
-function _VirtualDom_diffNodes(x, y, patches, index, diffKids)
-{
- // Bail if obvious indicators have changed. Implies more serious
- // structural changes such that it's not worth it to diff.
- if (x.c !== y.c || x.f !== y.f)
- {
- _VirtualDom_pushPatch(patches, 0, index, y);
- return;
- }
-
- var factsDiff = _VirtualDom_diffFacts(x.d, y.d);
- factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff);
-
- diffKids(x, y, patches, index);
-}
-
-
-
-// DIFF FACTS
-
-
-// TODO Instead of creating a new diff object, it's possible to just test if
-// there *is* a diff. During the actual patch, do the diff again and make the
-// modifications directly. This way, there's no new allocations. Worth it?
-function _VirtualDom_diffFacts(x, y, category)
-{
- var diff;
-
- // look for changes and removals
- for (var xKey in x)
- {
- if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4')
- {
- var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey);
- if (subDiff)
- {
- diff = diff || {};
- diff[xKey] = subDiff;
- }
- continue;
- }
-
- // remove if not in the new facts
- if (!(xKey in y))
- {
- diff = diff || {};
- diff[xKey] =
- !category
- ? (typeof x[xKey] === 'string' ? '' : null)
- :
- (category === 'a1')
- ? ''
- :
- (category === 'a0' || category === 'a3')
- ? undefined
- :
- { f: x[xKey].f, o: undefined };
-
- continue;
- }
-
- var xValue = x[xKey];
- var yValue = y[xKey];
-
- // reference equal, so don't worry about it
- if (xValue === yValue && xKey !== 'value'
- || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue))
- {
- continue;
- }
-
- diff = diff || {};
- diff[xKey] = yValue;
- }
-
- // add new stuff
- for (var yKey in y)
- {
- if (!(yKey in x))
- {
- diff = diff || {};
- diff[yKey] = y[yKey];
- }
- }
-
- return diff;
-}
-
-
-
-// DIFF KIDS
-
-
-function _VirtualDom_diffKids(xParent, yParent, patches, index)
-{
- var xKids = xParent.e;
- var yKids = yParent.e;
-
- var xLen = xKids.length;
- var yLen = yKids.length;
-
- // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS
-
- if (xLen > yLen)
- {
- _VirtualDom_pushPatch(patches, 6, index, {
- v: yLen,
- i: xLen - yLen
- });
- }
- else if (xLen < yLen)
- {
- _VirtualDom_pushPatch(patches, 7, index, {
- v: xLen,
- e: yKids
- });
- }
-
- // PAIRWISE DIFF EVERYTHING ELSE
-
- for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++)
- {
- var xKid = xKids[i];
- _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index);
- index += xKid.b || 0;
- }
-}
-
-
-
-// KEYED DIFF
-
-
-function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex)
-{
- var localPatches = [];
-
- var changes = {}; // Dict String Entry
- var inserts = []; // Array { index : Int, entry : Entry }
- // type Entry = { tag : String, vnode : VNode, index : Int, data : _ }
-
- var xKids = xParent.e;
- var yKids = yParent.e;
- var xLen = xKids.length;
- var yLen = yKids.length;
- var xIndex = 0;
- var yIndex = 0;
-
- var index = rootIndex;
-
- while (xIndex < xLen && yIndex < yLen)
- {
- var x = xKids[xIndex];
- var y = yKids[yIndex];
-
- var xKey = x.a;
- var yKey = y.a;
- var xNode = x.b;
- var yNode = y.b;
-
- // check if keys match
-
- if (xKey === yKey)
- {
- index++;
- _VirtualDom_diffHelp(xNode, yNode, localPatches, index);
- index += xNode.b || 0;
-
- xIndex++;
- yIndex++;
- continue;
- }
-
- // look ahead 1 to detect insertions and removals.
-
- var xNext = xKids[xIndex + 1];
- var yNext = yKids[yIndex + 1];
-
- if (xNext)
- {
- var xNextKey = xNext.a;
- var xNextNode = xNext.b;
- var oldMatch = yKey === xNextKey;
- }
-
- if (yNext)
- {
- var yNextKey = yNext.a;
- var yNextNode = yNext.b;
- var newMatch = xKey === yNextKey;
- }
-
-
- // swap x and y
- if (newMatch && oldMatch)
- {
- index++;
- _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
- _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts);
- index += xNode.b || 0;
-
- index++;
- _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index);
- index += xNextNode.b || 0;
-
- xIndex += 2;
- yIndex += 2;
- continue;
- }
-
- // insert y
- if (newMatch)
- {
- index++;
- _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
- _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index);
- index += xNode.b || 0;
-
- xIndex += 1;
- yIndex += 2;
- continue;
- }
-
- // remove x
- if (oldMatch)
- {
- index++;
- _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
- index += xNode.b || 0;
-
- index++;
- _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index);
- index += xNextNode.b || 0;
-
- xIndex += 2;
- yIndex += 1;
- continue;
- }
-
- // remove x, insert y
- if (xNext && xNextKey === yNextKey)
- {
- index++;
- _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index);
- _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts);
- index += xNode.b || 0;
-
- index++;
- _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index);
- index += xNextNode.b || 0;
-
- xIndex += 2;
- yIndex += 2;
- continue;
- }
-
- break;
- }
-
- // eat up any remaining nodes with removeNode and insertNode
-
- while (xIndex < xLen)
- {
- index++;
- var x = xKids[xIndex];
- var xNode = x.b;
- _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index);
- index += xNode.b || 0;
- xIndex++;
- }
-
- while (yIndex < yLen)
- {
- var endInserts = endInserts || [];
- var y = yKids[yIndex];
- _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts);
- yIndex++;
- }
-
- if (localPatches.length > 0 || inserts.length > 0 || endInserts)
- {
- _VirtualDom_pushPatch(patches, 8, rootIndex, {
- w: localPatches,
- x: inserts,
- y: endInserts
- });
- }
-}
-
-
-
-// CHANGES FROM KEYED DIFF
-
-
-var _VirtualDom_POSTFIX = '_elmW6BL';
-
-
-function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts)
-{
- var entry = changes[key];
-
- // never seen this key before
- if (!entry)
- {
- entry = {
- c: 0,
- z: vnode,
- r: yIndex,
- s: undefined
- };
-
- inserts.push({ r: yIndex, A: entry });
- changes[key] = entry;
-
- return;
- }
-
- // this key was removed earlier, a match!
- if (entry.c === 1)
- {
- inserts.push({ r: yIndex, A: entry });
-
- entry.c = 2;
- var subPatches = [];
- _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r);
- entry.r = yIndex;
- entry.s.s = {
- w: subPatches,
- A: entry
- };
-
- return;
- }
-
- // this key has already been inserted or moved, a duplicate!
- _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts);
-}
-
-
-function _VirtualDom_removeNode(changes, localPatches, key, vnode, index)
-{
- var entry = changes[key];
-
- // never seen this key before
- if (!entry)
- {
- var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined);
-
- changes[key] = {
- c: 1,
- z: vnode,
- r: index,
- s: patch
- };
-
- return;
- }
-
- // this key was inserted earlier, a match!
- if (entry.c === 0)
- {
- entry.c = 2;
- var subPatches = [];
- _VirtualDom_diffHelp(vnode, entry.z, subPatches, index);
-
- _VirtualDom_pushPatch(localPatches, 9, index, {
- w: subPatches,
- A: entry
- });
-
- return;
- }
-
- // this key has already been removed or moved, a duplicate!
- _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index);
-}
-
-
-
-// ADD DOM NODES
-//
-// Each DOM node has an "index" assigned in order of traversal. It is important
-// to minimize our crawl over the actual DOM, so these indexes (along with the
-// descendantsCount of virtual nodes) let us skip touching entire subtrees of
-// the DOM if we know there are no patches there.
-
-
-function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode)
-{
- _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode);
-}
-
-
-// assumes `patches` is non-empty and indexes increase monotonically.
-function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)
-{
- var patch = patches[i];
- var index = patch.r;
-
- while (index === low)
- {
- var patchType = patch.$;
-
- if (patchType === 1)
- {
- _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode);
- }
- else if (patchType === 8)
- {
- patch.t = domNode;
- patch.u = eventNode;
-
- var subPatches = patch.s.w;
- if (subPatches.length > 0)
- {
- _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
- }
- }
- else if (patchType === 9)
- {
- patch.t = domNode;
- patch.u = eventNode;
-
- var data = patch.s;
- if (data)
- {
- data.A.s = domNode;
- var subPatches = data.w;
- if (subPatches.length > 0)
- {
- _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);
- }
- }
- }
- else
- {
- patch.t = domNode;
- patch.u = eventNode;
- }
-
- i++;
-
- if (!(patch = patches[i]) || (index = patch.r) > high)
- {
- return i;
- }
- }
-
- var tag = vNode.$;
-
- if (tag === 4)
- {
- var subNode = vNode.k;
-
- while (subNode.$ === 4)
- {
- subNode = subNode.k;
- }
-
- return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);
- }
-
- // tag must be 1 or 2 at this point
-
- var vKids = vNode.e;
- var childNodes = domNode.childNodes;
- for (var j = 0; j < vKids.length; j++)
- {
- low++;
- var vKid = tag === 1 ? vKids[j] : vKids[j].b;
- var nextLow = low + (vKid.b || 0);
- if (low <= index && index <= nextLow)
- {
- i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode);
- if (!(patch = patches[i]) || (index = patch.r) > high)
- {
- return i;
- }
- }
- low = nextLow;
- }
- return i;
-}
-
-
-
-// APPLY PATCHES
-
-
-function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)
-{
- if (patches.length === 0)
- {
- return rootDomNode;
- }
-
- _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);
- return _VirtualDom_applyPatchesHelp(rootDomNode, patches);
-}
-
-function _VirtualDom_applyPatchesHelp(rootDomNode, patches)
-{
- for (var i = 0; i < patches.length; i++)
- {
- var patch = patches[i];
- var localDomNode = patch.t
- var newNode = _VirtualDom_applyPatch(localDomNode, patch);
- if (localDomNode === rootDomNode)
- {
- rootDomNode = newNode;
- }
- }
- return rootDomNode;
-}
-
-function _VirtualDom_applyPatch(domNode, patch)
-{
- switch (patch.$)
- {
- case 0:
- return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u);
-
- case 4:
- _VirtualDom_applyFacts(domNode, patch.u, patch.s);
- return domNode;
-
- case 3:
- domNode.replaceData(0, domNode.length, patch.s);
- return domNode;
-
- case 1:
- return _VirtualDom_applyPatchesHelp(domNode, patch.s);
-
- case 2:
- if (domNode.elm_event_node_ref)
- {
- domNode.elm_event_node_ref.j = patch.s;
- }
- else
- {
- domNode.elm_event_node_ref = { j: patch.s, p: patch.u };
- }
- return domNode;
-
- case 6:
- var data = patch.s;
- for (var i = 0; i < data.i; i++)
- {
- domNode.removeChild(domNode.childNodes[data.v]);
- }
- return domNode;
-
- case 7:
- var data = patch.s;
- var kids = data.e;
- var i = data.v;
- var theEnd = domNode.childNodes[i];
- for (; i < kids.length; i++)
- {
- domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
- }
- return domNode;
-
- case 9:
- var data = patch.s;
- if (!data)
- {
- domNode.parentNode.removeChild(domNode);
- return domNode;
- }
- var entry = data.A;
- if (typeof entry.r !== 'undefined')
- {
- domNode.parentNode.removeChild(domNode);
- }
- entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w);
- return domNode;
-
- case 8:
- return _VirtualDom_applyPatchReorder(domNode, patch);
-
- case 5:
- return patch.s(domNode);
-
- default:
- _Debug_crash(10); // 'Ran into an unknown patch!'
- }
-}
-
-
-function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode)
-{
- var parentNode = domNode.parentNode;
- var newNode = _VirtualDom_render(vNode, eventNode);
-
- if (!newNode.elm_event_node_ref)
- {
- newNode.elm_event_node_ref = domNode.elm_event_node_ref;
- }
-
- if (parentNode && newNode !== domNode)
- {
- parentNode.replaceChild(newNode, domNode);
- }
- return newNode;
-}
-
-
-function _VirtualDom_applyPatchReorder(domNode, patch)
-{
- var data = patch.s;
-
- // remove end inserts
- var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch);
-
- // removals
- domNode = _VirtualDom_applyPatchesHelp(domNode, data.w);
-
- // inserts
- var inserts = data.x;
- for (var i = 0; i < inserts.length; i++)
- {
- var insert = inserts[i];
- var entry = insert.A;
- var node = entry.c === 2
- ? entry.s
- : _VirtualDom_render(entry.z, patch.u);
- domNode.insertBefore(node, domNode.childNodes[insert.r]);
- }
-
- // add end inserts
- if (frag)
- {
- _VirtualDom_appendChild(domNode, frag);
- }
-
- return domNode;
-}
-
-
-function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch)
-{
- if (!endInserts)
- {
- return;
- }
-
- var frag = _VirtualDom_doc.createDocumentFragment();
- for (var i = 0; i < endInserts.length; i++)
- {
- var insert = endInserts[i];
- var entry = insert.A;
- _VirtualDom_appendChild(frag, entry.c === 2
- ? entry.s
- : _VirtualDom_render(entry.z, patch.u)
- );
- }
- return frag;
-}
-
-
-function _VirtualDom_virtualize(node)
-{
- // TEXT NODES
-
- if (node.nodeType === 3)
- {
- return _VirtualDom_text(node.textContent);
- }
-
-
- // WEIRD NODES
-
- if (node.nodeType !== 1)
- {
- return _VirtualDom_text('');
- }
-
-
- // ELEMENT NODES
-
- var attrList = _List_Nil;
- var attrs = node.attributes;
- for (var i = attrs.length; i--; )
- {
- var attr = attrs[i];
- var name = attr.name;
- var value = attr.value;
- attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList );
- }
-
- var tag = node.tagName.toLowerCase();
- var kidList = _List_Nil;
- var kids = node.childNodes;
-
- for (var i = kids.length; i--; )
- {
- kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList);
- }
- return A3(_VirtualDom_node, tag, attrList, kidList);
-}
-
-function _VirtualDom_dekey(keyedNode)
-{
- var keyedKids = keyedNode.e;
- var len = keyedKids.length;
- var kids = new Array(len);
- for (var i = 0; i < len; i++)
- {
- kids[i] = keyedKids[i].b;
- }
-
- return {
- $: 1,
- c: keyedNode.c,
- d: keyedNode.d,
- e: kids,
- f: keyedNode.f,
- b: keyedNode.b
- };
-}
-
-
-
-// ELEMENT
-
-
-var _Debugger_element;
-
-var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args)
-{
- return _Platform_initialize(
- flagDecoder,
- args,
- impl.bJ,
- impl.b1,
- impl.b_,
- function(sendToApp, initialModel) {
- var view = impl.b4;
- /**/
- var domNode = args['node'];
- //*/
- /**_UNUSED/
- var domNode = args && args['node'] ? args['node'] : _Debug_crash(0);
- //*/
- var currNode = _VirtualDom_virtualize(domNode);
-
- return _Browser_makeAnimator(initialModel, function(model)
- {
- var nextNode = view(model);
- var patches = _VirtualDom_diff(currNode, nextNode);
- domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp);
- currNode = nextNode;
- });
- }
- );
-});
-
-
-
-// DOCUMENT
-
-
-var _Debugger_document;
-
-var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args)
-{
- return _Platform_initialize(
- flagDecoder,
- args,
- impl.bJ,
- impl.b1,
- impl.b_,
- function(sendToApp, initialModel) {
- var divertHrefToApp = impl.az && impl.az(sendToApp)
- var view = impl.b4;
- var title = _VirtualDom_doc.title;
- var bodyNode = _VirtualDom_doc.body;
- var currNode = _VirtualDom_virtualize(bodyNode);
- return _Browser_makeAnimator(initialModel, function(model)
- {
- _VirtualDom_divertHrefToApp = divertHrefToApp;
- var doc = view(model);
- var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.bm);
- var patches = _VirtualDom_diff(currNode, nextNode);
- bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp);
- currNode = nextNode;
- _VirtualDom_divertHrefToApp = 0;
- (title !== doc.b$) && (_VirtualDom_doc.title = title = doc.b$);
- });
- }
- );
-});
-
-
-
-// ANIMATION
-
-
-var _Browser_requestAnimationFrame =
- typeof requestAnimationFrame !== 'undefined'
- ? requestAnimationFrame
- : function(callback) { setTimeout(callback, 1000 / 60); };
-
-
-function _Browser_makeAnimator(model, draw)
-{
- draw(model);
-
- var state = 0;
-
- function updateIfNeeded()
- {
- state = state === 1
- ? 0
- : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 );
- }
-
- return function(nextModel, isSync)
- {
- model = nextModel;
-
- isSync
- ? ( draw(model),
- state === 2 && (state = 1)
- )
- : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded),
- state = 2
- );
- };
-}
-
-
-
-// APPLICATION
-
-
-function _Browser_application(impl)
-{
- var key = {};
- var onUrlChange = impl.bP;
- var onUrlRequest = impl.bQ;
- return _Browser_document({
- az: function(sendToApp)
- {
- function reportChange()
- {
- sendToApp(onUrlChange(_Browser_getUrl()));
- }
-
- key.a = reportChange;
-
- _Browser_window.addEventListener('popstate', reportChange);
- _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', reportChange);
-
- return F2(function(domNode, event)
- {
- if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target)
- {
- event.preventDefault();
- var href = domNode.href;
- var curr = _Browser_getUrl();
- var next = elm$url$Url$fromString(href).a;
- sendToApp(onUrlRequest(
- (next
- && curr.a2 === next.a2
- && curr.aR === next.aR
- && curr.a_.a === next.a_.a
- )
- ? elm$browser$Browser$Internal(next)
- : elm$browser$Browser$External(href)
- ));
- }
- });
- },
- bJ: function(flags)
- {
- return A3(impl.bJ, flags, _Browser_getUrl(), key);
- },
- b4: impl.b4,
- b1: impl.b1,
- b_: impl.b_
- });
-}
-
-function _Browser_getUrl()
-{
- return elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1);
-}
-
-var _Browser_go = F2(function(key, n)
-{
- return A2(elm$core$Task$perform, elm$core$Basics$never, _Scheduler_binding(function() {
- n && history.go(n);
- key.a();
- }));
-});
-
-var _Browser_pushUrl = F2(function(key, url)
-{
- return A2(elm$core$Task$perform, elm$core$Basics$never, _Scheduler_binding(function() {
- history.pushState({}, '', url);
- key.a();
- }));
-});
-
-var _Browser_replaceUrl = F2(function(key, url)
-{
- return A2(elm$core$Task$perform, elm$core$Basics$never, _Scheduler_binding(function() {
- history.replaceState({}, '', url);
- key.a();
- }));
-});
-
-
-
-// GLOBAL EVENTS
-
-
-var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} };
-var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode;
-var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode;
-
-var _Browser_on = F3(function(node, eventName, sendToSelf)
-{
- return _Scheduler_spawn(_Scheduler_binding(function(callback)
- {
- function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); }
- node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true });
- return function() { node.removeEventListener(eventName, handler); };
- }));
-});
-
-var _Browser_decodeEvent = F2(function(decoder, event)
-{
- var result = _Json_runHelp(decoder, event);
- return elm$core$Result$isOk(result) ? elm$core$Maybe$Just(result.a) : elm$core$Maybe$Nothing;
-});
-
-
-
-// PAGE VISIBILITY
-
-
-function _Browser_visibilityInfo()
-{
- return (typeof _VirtualDom_doc.hidden !== 'undefined')
- ? { bG: 'hidden', L: 'visibilitychange' }
- :
- (typeof _VirtualDom_doc.mozHidden !== 'undefined')
- ? { bG: 'mozHidden', L: 'mozvisibilitychange' }
- :
- (typeof _VirtualDom_doc.msHidden !== 'undefined')
- ? { bG: 'msHidden', L: 'msvisibilitychange' }
- :
- (typeof _VirtualDom_doc.webkitHidden !== 'undefined')
- ? { bG: 'webkitHidden', L: 'webkitvisibilitychange' }
- : { bG: 'hidden', L: 'visibilitychange' };
-}
-
-
-
-// ANIMATION FRAMES
-
-
-function _Browser_rAF()
-{
- return _Scheduler_binding(function(callback)
- {
- var id = requestAnimationFrame(function() {
- callback(_Scheduler_succeed(Date.now()));
- });
-
- return function() {
- cancelAnimationFrame(id);
- };
- });
-}
-
-
-function _Browser_now()
-{
- return _Scheduler_binding(function(callback)
- {
- callback(_Scheduler_succeed(Date.now()));
- });
-}
-
-
-
-// DOM STUFF
-
-
-function _Browser_withNode(id, doStuff)
-{
- return _Scheduler_binding(function(callback)
- {
- _Browser_requestAnimationFrame(function() {
- var node = document.getElementById(id);
- callback(node
- ? _Scheduler_succeed(doStuff(node))
- : _Scheduler_fail(elm$browser$Browser$Dom$NotFound(id))
- );
- });
- });
-}
-
-
-function _Browser_withWindow(doStuff)
-{
- return _Scheduler_binding(function(callback)
- {
- _Browser_requestAnimationFrame(function() {
- callback(_Scheduler_succeed(doStuff()));
- });
- });
-}
-
-
-// FOCUS and BLUR
-
-
-var _Browser_call = F2(function(functionName, id)
-{
- return _Browser_withNode(id, function(node) {
- node[functionName]();
- return _Utils_Tuple0;
- });
-});
-
-
-
-// WINDOW VIEWPORT
-
-
-function _Browser_getViewport()
-{
- var node = _Browser_doc.documentElement;
- return {
- a8: {
- C: node.scrollWidth,
- w: node.scrollHeight
- },
- bf: {
- Z: _Browser_window.pageXOffset,
- _: _Browser_window.pageYOffset,
- C: node.clientWidth,
- w: node.clientHeight
- }
- };
-}
-
-
-var _Browser_setViewport = F2(function(x, y)
-{
- return _Browser_withWindow(function()
- {
- _Browser_window.scroll(x, y);
- return _Utils_Tuple0;
- });
-});
-
-
-
-// ELEMENT VIEWPORT
-
-
-function _Browser_getViewportOf(id)
-{
- return _Browser_withNode(id, function(node)
- {
- return {
- a8: {
- C: node.scrollWidth,
- w: node.scrollHeight
- },
- bf: {
- Z: node.scrollLeft,
- _: node.scrollTop,
- C: node.clientWidth,
- w: node.clientHeight
- }
- };
- });
-}
-
-
-var _Browser_setViewportOf = F3(function(id, x, y)
-{
- return _Browser_withNode(id, function(node)
- {
- node.scrollLeft = x;
- node.scrollTop = y;
- return _Utils_Tuple0;
- });
-});
-
-
-
-// ELEMENT
-
-
-function _Browser_getElement(id)
-{
- return _Browser_withNode(id, function(node)
- {
- var rect = node.getBoundingClientRect();
- var x = _Browser_window.pageXOffset;
- var y = _Browser_window.pageYOffset;
- return {
- a8: {
- C: node.scrollWidth,
- w: node.scrollHeight
- },
- bf: {
- Z: x,
- _: y,
- C: node.clientWidth,
- w: node.clientHeight
- },
- bz: {
- Z: x + rect.left,
- _: y + rect.top,
- C: rect.width,
- w: rect.height
- }
- };
- });
-}
-
-
-
-// LOAD and RELOAD
-
-
-function _Browser_reload(skipCache)
-{
- return A2(elm$core$Task$perform, elm$core$Basics$never, _Scheduler_binding(function(callback)
- {
- _VirtualDom_doc.location.reload(skipCache);
- }));
-}
-
-function _Browser_load(url)
-{
- return A2(elm$core$Task$perform, elm$core$Basics$never, _Scheduler_binding(function(callback)
- {
- try
- {
- _Browser_window.location = url;
- }
- catch(err)
- {
- // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here.
- // Other browsers reload the page, so let's be consistent about that.
- _VirtualDom_doc.location.reload(false);
- }
- }));
-}
-var elm$core$Maybe$Nothing = {$: 1};
-var elm$core$Basics$False = 1;
-var elm$core$Basics$True = 0;
-var elm$core$Result$isOk = function (result) {
- if (!result.$) {
- return true;
- } else {
- return false;
- }
-};
-var elm$core$Basics$EQ = 1;
-var elm$core$Basics$GT = 2;
-var elm$core$Basics$LT = 0;
-var elm$core$Dict$foldr = F3(
- function (func, acc, t) {
- foldr:
- while (true) {
- if (t.$ === -2) {
- return acc;
- } else {
- var key = t.b;
- var value = t.c;
- var left = t.d;
- var right = t.e;
- var $temp$func = func,
- $temp$acc = A3(
- func,
- key,
- value,
- A3(elm$core$Dict$foldr, func, acc, right)),
- $temp$t = left;
- func = $temp$func;
- acc = $temp$acc;
- t = $temp$t;
- continue foldr;
- }
- }
- });
-var elm$core$List$cons = _List_cons;
-var elm$core$Dict$toList = function (dict) {
- return A3(
- elm$core$Dict$foldr,
- F3(
- function (key, value, list) {
- return A2(
- elm$core$List$cons,
- _Utils_Tuple2(key, value),
- list);
- }),
- _List_Nil,
- dict);
-};
-var elm$core$Dict$keys = function (dict) {
- return A3(
- elm$core$Dict$foldr,
- F3(
- function (key, value, keyList) {
- return A2(elm$core$List$cons, key, keyList);
- }),
- _List_Nil,
- dict);
-};
-var elm$core$Set$toList = function (_n0) {
- var dict = _n0;
- return elm$core$Dict$keys(dict);
-};
-var elm$core$Elm$JsArray$foldr = _JsArray_foldr;
-var elm$core$Array$foldr = F3(
- function (func, baseCase, _n0) {
- var tree = _n0.c;
- var tail = _n0.d;
- var helper = F2(
- function (node, acc) {
- if (!node.$) {
- var subTree = node.a;
- return A3(elm$core$Elm$JsArray$foldr, helper, acc, subTree);
- } else {
- var values = node.a;
- return A3(elm$core$Elm$JsArray$foldr, func, acc, values);
- }
- });
- return A3(
- elm$core$Elm$JsArray$foldr,
- helper,
- A3(elm$core$Elm$JsArray$foldr, func, baseCase, tail),
- tree);
- });
-var elm$core$Array$toList = function (array) {
- return A3(elm$core$Array$foldr, elm$core$List$cons, _List_Nil, array);
-};
-var elm$core$Array$branchFactor = 32;
-var elm$core$Array$Array_elm_builtin = F4(
- function (a, b, c, d) {
- return {$: 0, a: a, b: b, c: c, d: d};
- });
-var elm$core$Basics$ceiling = _Basics_ceiling;
-var elm$core$Basics$fdiv = _Basics_fdiv;
-var elm$core$Basics$logBase = F2(
- function (base, number) {
- return _Basics_log(number) / _Basics_log(base);
- });
-var elm$core$Basics$toFloat = _Basics_toFloat;
-var elm$core$Array$shiftStep = elm$core$Basics$ceiling(
- A2(elm$core$Basics$logBase, 2, elm$core$Array$branchFactor));
-var elm$core$Elm$JsArray$empty = _JsArray_empty;
-var elm$core$Array$empty = A4(elm$core$Array$Array_elm_builtin, 0, elm$core$Array$shiftStep, elm$core$Elm$JsArray$empty, elm$core$Elm$JsArray$empty);
-var elm$core$Array$Leaf = function (a) {
- return {$: 1, a: a};
-};
-var elm$core$Array$SubTree = function (a) {
- return {$: 0, a: a};
-};
-var elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList;
-var elm$core$List$foldl = F3(
- function (func, acc, list) {
- foldl:
- while (true) {
- if (!list.b) {
- return acc;
- } else {
- var x = list.a;
- var xs = list.b;
- var $temp$func = func,
- $temp$acc = A2(func, x, acc),
- $temp$list = xs;
- func = $temp$func;
- acc = $temp$acc;
- list = $temp$list;
- continue foldl;
- }
- }
- });
-var elm$core$List$reverse = function (list) {
- return A3(elm$core$List$foldl, elm$core$List$cons, _List_Nil, list);
-};
-var elm$core$Array$compressNodes = F2(
- function (nodes, acc) {
- compressNodes:
- while (true) {
- var _n0 = A2(elm$core$Elm$JsArray$initializeFromList, elm$core$Array$branchFactor, nodes);
- var node = _n0.a;
- var remainingNodes = _n0.b;
- var newAcc = A2(
- elm$core$List$cons,
- elm$core$Array$SubTree(node),
- acc);
- if (!remainingNodes.b) {
- return elm$core$List$reverse(newAcc);
- } else {
- var $temp$nodes = remainingNodes,
- $temp$acc = newAcc;
- nodes = $temp$nodes;
- acc = $temp$acc;
- continue compressNodes;
- }
- }
- });
-var elm$core$Basics$apR = F2(
- function (x, f) {
- return f(x);
- });
-var elm$core$Basics$eq = _Utils_equal;
-var elm$core$Tuple$first = function (_n0) {
- var x = _n0.a;
- return x;
-};
-var elm$core$Array$treeFromBuilder = F2(
- function (nodeList, nodeListSize) {
- treeFromBuilder:
- while (true) {
- var newNodeSize = elm$core$Basics$ceiling(nodeListSize / elm$core$Array$branchFactor);
- if (newNodeSize === 1) {
- return A2(elm$core$Elm$JsArray$initializeFromList, elm$core$Array$branchFactor, nodeList).a;
- } else {
- var $temp$nodeList = A2(elm$core$Array$compressNodes, nodeList, _List_Nil),
- $temp$nodeListSize = newNodeSize;
- nodeList = $temp$nodeList;
- nodeListSize = $temp$nodeListSize;
- continue treeFromBuilder;
- }
- }
- });
-var elm$core$Basics$add = _Basics_add;
-var elm$core$Basics$apL = F2(
- function (f, x) {
- return f(x);
- });
-var elm$core$Basics$floor = _Basics_floor;
-var elm$core$Basics$gt = _Utils_gt;
-var elm$core$Basics$max = F2(
- function (x, y) {
- return (_Utils_cmp(x, y) > 0) ? x : y;
- });
-var elm$core$Basics$mul = _Basics_mul;
-var elm$core$Basics$sub = _Basics_sub;
-var elm$core$Elm$JsArray$length = _JsArray_length;
-var elm$core$Array$builderToArray = F2(
- function (reverseNodeList, builder) {
- if (!builder.f) {
- return A4(
- elm$core$Array$Array_elm_builtin,
- elm$core$Elm$JsArray$length(builder.h),
- elm$core$Array$shiftStep,
- elm$core$Elm$JsArray$empty,
- builder.h);
- } else {
- var treeLen = builder.f * elm$core$Array$branchFactor;
- var depth = elm$core$Basics$floor(
- A2(elm$core$Basics$logBase, elm$core$Array$branchFactor, treeLen - 1));
- var correctNodeList = reverseNodeList ? elm$core$List$reverse(builder.i) : builder.i;
- var tree = A2(elm$core$Array$treeFromBuilder, correctNodeList, builder.f);
- return A4(
- elm$core$Array$Array_elm_builtin,
- elm$core$Elm$JsArray$length(builder.h) + treeLen,
- A2(elm$core$Basics$max, 5, depth * elm$core$Array$shiftStep),
- tree,
- builder.h);
- }
- });
-var elm$core$Basics$idiv = _Basics_idiv;
-var elm$core$Basics$lt = _Utils_lt;
-var elm$core$Elm$JsArray$initialize = _JsArray_initialize;
-var elm$core$Array$initializeHelp = F5(
- function (fn, fromIndex, len, nodeList, tail) {
- initializeHelp:
- while (true) {
- if (fromIndex < 0) {
- return A2(
- elm$core$Array$builderToArray,
- false,
- {i: nodeList, f: (len / elm$core$Array$branchFactor) | 0, h: tail});
- } else {
- var leaf = elm$core$Array$Leaf(
- A3(elm$core$Elm$JsArray$initialize, elm$core$Array$branchFactor, fromIndex, fn));
- var $temp$fn = fn,
- $temp$fromIndex = fromIndex - elm$core$Array$branchFactor,
- $temp$len = len,
- $temp$nodeList = A2(elm$core$List$cons, leaf, nodeList),
- $temp$tail = tail;
- fn = $temp$fn;
- fromIndex = $temp$fromIndex;
- len = $temp$len;
- nodeList = $temp$nodeList;
- tail = $temp$tail;
- continue initializeHelp;
- }
- }
- });
-var elm$core$Basics$le = _Utils_le;
-var elm$core$Basics$remainderBy = _Basics_remainderBy;
-var elm$core$Array$initialize = F2(
- function (len, fn) {
- if (len <= 0) {
- return elm$core$Array$empty;
- } else {
- var tailLen = len % elm$core$Array$branchFactor;
- var tail = A3(elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn);
- var initialFromIndex = (len - tailLen) - elm$core$Array$branchFactor;
- return A5(elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail);
- }
- });
-var elm$core$Maybe$Just = function (a) {
- return {$: 0, a: a};
-};
-var elm$core$Result$Err = function (a) {
- return {$: 1, a: a};
-};
-var elm$core$Result$Ok = function (a) {
- return {$: 0, a: a};
-};
-var elm$json$Json$Decode$Failure = F2(
- function (a, b) {
- return {$: 3, a: a, b: b};
- });
-var elm$json$Json$Decode$Field = F2(
- function (a, b) {
- return {$: 0, a: a, b: b};
- });
-var elm$json$Json$Decode$Index = F2(
- function (a, b) {
- return {$: 1, a: a, b: b};
- });
-var elm$json$Json$Decode$OneOf = function (a) {
- return {$: 2, a: a};
-};
-var elm$core$Platform$Cmd$batch = _Platform_batch;
-var elm$core$Platform$Cmd$none = elm$core$Platform$Cmd$batch(_List_Nil);
-var author$project$Main$init = function (_n0) {
- return _Utils_Tuple2(
- {aa: elm$core$Maybe$Nothing, aB: elm$core$Maybe$Nothing, X: '', Y: ''},
- elm$core$Platform$Cmd$none);
-};
-var elm$core$Platform$Sub$batch = _Platform_batch;
-var elm$core$Platform$Sub$none = elm$core$Platform$Sub$batch(_List_Nil);
-var author$project$Main$subscriptions = function (model) {
- return elm$core$Platform$Sub$none;
-};
-var author$project$Main$errorToString = function (err) {
- switch (err.$) {
- case 0:
- var stringString = err.a;
- return 'Invalid URL. Check the inputs to make sure that it is a valid https url or starts with mapbox://styles/';
- case 1:
- return 'Request timed out. Try again later.';
- case 2:
- return 'Network error. Are you online?';
- case 3:
- var response = err.a;
- var _n1 = response.bb.br;
- switch (_n1) {
- case 401:
- return 'An authentication error occurred. Check your key and try again.';
- case 404:
- return 'Couldn\'t find that style';
- default:
- return response.bb.bN;
- }
- default:
- var m = err.a;
- return m;
- }
-};
-var author$project$Main$LoadedStyle = function (a) {
- return {$: 0, a: a};
-};
-var elm$core$Basics$append = _Utils_append;
-var elm$core$String$join = F2(
- function (sep, chunks) {
- return A2(
- _String_join,
- sep,
- _List_toArray(chunks));
- });
-var elm$core$String$split = F2(
- function (sep, string) {
- return _List_fromArray(
- A2(_String_split, sep, string));
- });
-var elm$core$String$replace = F3(
- function (before, after, string) {
- return A2(
- elm$core$String$join,
- after,
- A2(elm$core$String$split, before, string));
- });
-var elm$http$Http$Internal$EmptyBody = {$: 0};
-var elm$http$Http$emptyBody = elm$http$Http$Internal$EmptyBody;
-var elm$core$Dict$RBEmpty_elm_builtin = {$: -2};
-var elm$core$Dict$empty = elm$core$Dict$RBEmpty_elm_builtin;
-var elm$core$Basics$compare = _Utils_compare;
-var elm$core$Dict$get = F2(
- function (targetKey, dict) {
- get:
- while (true) {
- if (dict.$ === -2) {
- return elm$core$Maybe$Nothing;
- } else {
- var key = dict.b;
- var value = dict.c;
- var left = dict.d;
- var right = dict.e;
- var _n1 = A2(elm$core$Basics$compare, targetKey, key);
- switch (_n1) {
- case 0:
- var $temp$targetKey = targetKey,
- $temp$dict = left;
- targetKey = $temp$targetKey;
- dict = $temp$dict;
- continue get;
- case 1:
- return elm$core$Maybe$Just(value);
- default:
- var $temp$targetKey = targetKey,
- $temp$dict = right;
- targetKey = $temp$targetKey;
- dict = $temp$dict;
- continue get;
- }
- }
- }
- });
-var elm$core$Dict$Black = 1;
-var elm$core$Dict$RBNode_elm_builtin = F5(
- function (a, b, c, d, e) {
- return {$: -1, a: a, b: b, c: c, d: d, e: e};
- });
-var elm$core$Dict$Red = 0;
-var elm$core$Dict$balance = F5(
- function (color, key, value, left, right) {
- if ((right.$ === -1) && (!right.a)) {
- var _n1 = right.a;
- var rK = right.b;
- var rV = right.c;
- var rLeft = right.d;
- var rRight = right.e;
- if ((left.$ === -1) && (!left.a)) {
- var _n3 = left.a;
- var lK = left.b;
- var lV = left.c;
- var lLeft = left.d;
- var lRight = left.e;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 0,
- key,
- value,
- A5(elm$core$Dict$RBNode_elm_builtin, 1, lK, lV, lLeft, lRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 1, rK, rV, rLeft, rRight));
- } else {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- rK,
- rV,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, key, value, left, rLeft),
- rRight);
- }
- } else {
- if ((((left.$ === -1) && (!left.a)) && (left.d.$ === -1)) && (!left.d.a)) {
- var _n5 = left.a;
- var lK = left.b;
- var lV = left.c;
- var _n6 = left.d;
- var _n7 = _n6.a;
- var llK = _n6.b;
- var llV = _n6.c;
- var llLeft = _n6.d;
- var llRight = _n6.e;
- var lRight = left.e;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 0,
- lK,
- lV,
- A5(elm$core$Dict$RBNode_elm_builtin, 1, llK, llV, llLeft, llRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 1, key, value, lRight, right));
- } else {
- return A5(elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right);
- }
- }
- });
-var elm$core$Dict$insertHelp = F3(
- function (key, value, dict) {
- if (dict.$ === -2) {
- return A5(elm$core$Dict$RBNode_elm_builtin, 0, key, value, elm$core$Dict$RBEmpty_elm_builtin, elm$core$Dict$RBEmpty_elm_builtin);
- } else {
- var nColor = dict.a;
- var nKey = dict.b;
- var nValue = dict.c;
- var nLeft = dict.d;
- var nRight = dict.e;
- var _n1 = A2(elm$core$Basics$compare, key, nKey);
- switch (_n1) {
- case 0:
- return A5(
- elm$core$Dict$balance,
- nColor,
- nKey,
- nValue,
- A3(elm$core$Dict$insertHelp, key, value, nLeft),
- nRight);
- case 1:
- return A5(elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight);
- default:
- return A5(
- elm$core$Dict$balance,
- nColor,
- nKey,
- nValue,
- nLeft,
- A3(elm$core$Dict$insertHelp, key, value, nRight));
- }
- }
- });
-var elm$core$Dict$insert = F3(
- function (key, value, dict) {
- var _n0 = A3(elm$core$Dict$insertHelp, key, value, dict);
- if ((_n0.$ === -1) && (!_n0.a)) {
- var _n1 = _n0.a;
- var k = _n0.b;
- var v = _n0.c;
- var l = _n0.d;
- var r = _n0.e;
- return A5(elm$core$Dict$RBNode_elm_builtin, 1, k, v, l, r);
- } else {
- var x = _n0;
- return x;
- }
- });
-var elm$core$Dict$getMin = function (dict) {
- getMin:
- while (true) {
- if ((dict.$ === -1) && (dict.d.$ === -1)) {
- var left = dict.d;
- var $temp$dict = left;
- dict = $temp$dict;
- continue getMin;
- } else {
- return dict;
- }
- }
-};
-var elm$core$Dict$moveRedLeft = function (dict) {
- if (((dict.$ === -1) && (dict.d.$ === -1)) && (dict.e.$ === -1)) {
- if ((dict.e.d.$ === -1) && (!dict.e.d.a)) {
- var clr = dict.a;
- var k = dict.b;
- var v = dict.c;
- var _n1 = dict.d;
- var lClr = _n1.a;
- var lK = _n1.b;
- var lV = _n1.c;
- var lLeft = _n1.d;
- var lRight = _n1.e;
- var _n2 = dict.e;
- var rClr = _n2.a;
- var rK = _n2.b;
- var rV = _n2.c;
- var rLeft = _n2.d;
- var _n3 = rLeft.a;
- var rlK = rLeft.b;
- var rlV = rLeft.c;
- var rlL = rLeft.d;
- var rlR = rLeft.e;
- var rRight = _n2.e;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 0,
- rlK,
- rlV,
- A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, lLeft, lRight),
- rlL),
- A5(elm$core$Dict$RBNode_elm_builtin, 1, rK, rV, rlR, rRight));
- } else {
- var clr = dict.a;
- var k = dict.b;
- var v = dict.c;
- var _n4 = dict.d;
- var lClr = _n4.a;
- var lK = _n4.b;
- var lV = _n4.c;
- var lLeft = _n4.d;
- var lRight = _n4.e;
- var _n5 = dict.e;
- var rClr = _n5.a;
- var rK = _n5.b;
- var rV = _n5.c;
- var rLeft = _n5.d;
- var rRight = _n5.e;
- if (clr === 1) {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, lLeft, lRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 0, rK, rV, rLeft, rRight));
- } else {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, lLeft, lRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 0, rK, rV, rLeft, rRight));
- }
- }
- } else {
- return dict;
- }
-};
-var elm$core$Dict$moveRedRight = function (dict) {
- if (((dict.$ === -1) && (dict.d.$ === -1)) && (dict.e.$ === -1)) {
- if ((dict.d.d.$ === -1) && (!dict.d.d.a)) {
- var clr = dict.a;
- var k = dict.b;
- var v = dict.c;
- var _n1 = dict.d;
- var lClr = _n1.a;
- var lK = _n1.b;
- var lV = _n1.c;
- var _n2 = _n1.d;
- var _n3 = _n2.a;
- var llK = _n2.b;
- var llV = _n2.c;
- var llLeft = _n2.d;
- var llRight = _n2.e;
- var lRight = _n1.e;
- var _n4 = dict.e;
- var rClr = _n4.a;
- var rK = _n4.b;
- var rV = _n4.c;
- var rLeft = _n4.d;
- var rRight = _n4.e;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 0,
- lK,
- lV,
- A5(elm$core$Dict$RBNode_elm_builtin, 1, llK, llV, llLeft, llRight),
- A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- lRight,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, rK, rV, rLeft, rRight)));
- } else {
- var clr = dict.a;
- var k = dict.b;
- var v = dict.c;
- var _n5 = dict.d;
- var lClr = _n5.a;
- var lK = _n5.b;
- var lV = _n5.c;
- var lLeft = _n5.d;
- var lRight = _n5.e;
- var _n6 = dict.e;
- var rClr = _n6.a;
- var rK = _n6.b;
- var rV = _n6.c;
- var rLeft = _n6.d;
- var rRight = _n6.e;
- if (clr === 1) {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, lLeft, lRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 0, rK, rV, rLeft, rRight));
- } else {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- 1,
- k,
- v,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, lK, lV, lLeft, lRight),
- A5(elm$core$Dict$RBNode_elm_builtin, 0, rK, rV, rLeft, rRight));
- }
- }
- } else {
- return dict;
- }
-};
-var elm$core$Dict$removeHelpPrepEQGT = F7(
- function (targetKey, dict, color, key, value, left, right) {
- if ((left.$ === -1) && (!left.a)) {
- var _n1 = left.a;
- var lK = left.b;
- var lV = left.c;
- var lLeft = left.d;
- var lRight = left.e;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- lK,
- lV,
- lLeft,
- A5(elm$core$Dict$RBNode_elm_builtin, 0, key, value, lRight, right));
- } else {
- _n2$2:
- while (true) {
- if ((right.$ === -1) && (right.a === 1)) {
- if (right.d.$ === -1) {
- if (right.d.a === 1) {
- var _n3 = right.a;
- var _n4 = right.d;
- var _n5 = _n4.a;
- return elm$core$Dict$moveRedRight(dict);
- } else {
- break _n2$2;
- }
- } else {
- var _n6 = right.a;
- var _n7 = right.d;
- return elm$core$Dict$moveRedRight(dict);
- }
- } else {
- break _n2$2;
- }
- }
- return dict;
- }
- });
-var elm$core$Dict$removeMin = function (dict) {
- if ((dict.$ === -1) && (dict.d.$ === -1)) {
- var color = dict.a;
- var key = dict.b;
- var value = dict.c;
- var left = dict.d;
- var lColor = left.a;
- var lLeft = left.d;
- var right = dict.e;
- if (lColor === 1) {
- if ((lLeft.$ === -1) && (!lLeft.a)) {
- var _n3 = lLeft.a;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- key,
- value,
- elm$core$Dict$removeMin(left),
- right);
- } else {
- var _n4 = elm$core$Dict$moveRedLeft(dict);
- if (_n4.$ === -1) {
- var nColor = _n4.a;
- var nKey = _n4.b;
- var nValue = _n4.c;
- var nLeft = _n4.d;
- var nRight = _n4.e;
- return A5(
- elm$core$Dict$balance,
- nColor,
- nKey,
- nValue,
- elm$core$Dict$removeMin(nLeft),
- nRight);
- } else {
- return elm$core$Dict$RBEmpty_elm_builtin;
- }
- }
- } else {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- key,
- value,
- elm$core$Dict$removeMin(left),
- right);
- }
- } else {
- return elm$core$Dict$RBEmpty_elm_builtin;
- }
-};
-var elm$core$Dict$removeHelp = F2(
- function (targetKey, dict) {
- if (dict.$ === -2) {
- return elm$core$Dict$RBEmpty_elm_builtin;
- } else {
- var color = dict.a;
- var key = dict.b;
- var value = dict.c;
- var left = dict.d;
- var right = dict.e;
- if (_Utils_cmp(targetKey, key) < 0) {
- if ((left.$ === -1) && (left.a === 1)) {
- var _n4 = left.a;
- var lLeft = left.d;
- if ((lLeft.$ === -1) && (!lLeft.a)) {
- var _n6 = lLeft.a;
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- key,
- value,
- A2(elm$core$Dict$removeHelp, targetKey, left),
- right);
- } else {
- var _n7 = elm$core$Dict$moveRedLeft(dict);
- if (_n7.$ === -1) {
- var nColor = _n7.a;
- var nKey = _n7.b;
- var nValue = _n7.c;
- var nLeft = _n7.d;
- var nRight = _n7.e;
- return A5(
- elm$core$Dict$balance,
- nColor,
- nKey,
- nValue,
- A2(elm$core$Dict$removeHelp, targetKey, nLeft),
- nRight);
- } else {
- return elm$core$Dict$RBEmpty_elm_builtin;
- }
- }
- } else {
- return A5(
- elm$core$Dict$RBNode_elm_builtin,
- color,
- key,
- value,
- A2(elm$core$Dict$removeHelp, targetKey, left),
- right);
- }
- } else {
- return A2(
- elm$core$Dict$removeHelpEQGT,
- targetKey,
- A7(elm$core$Dict$removeHelpPrepEQGT, targetKey, dict, color, key, value, left, right));
- }
- }
- });
-var elm$core$Dict$removeHelpEQGT = F2(
- function (targetKey, dict) {
- if (dict.$ === -1) {
- var color = dict.a;
- var key = dict.b;
- var value = dict.c;
- var left = dict.d;
- var right = dict.e;
- if (_Utils_eq(targetKey, key)) {
- var _n1 = elm$core$Dict$getMin(right);
- if (_n1.$ === -1) {
- var minKey = _n1.b;
- var minValue = _n1.c;
- return A5(
- elm$core$Dict$balance,
- color,
- minKey,
- minValue,
- left,
- elm$core$Dict$removeMin(right));
- } else {
- return elm$core$Dict$RBEmpty_elm_builtin;
- }
- } else {
- return A5(
- elm$core$Dict$balance,
- color,
- key,
- value,
- left,
- A2(elm$core$Dict$removeHelp, targetKey, right));
- }
- } else {
- return elm$core$Dict$RBEmpty_elm_builtin;
- }
- });
-var elm$core$Dict$remove = F2(
- function (key, dict) {
- var _n0 = A2(elm$core$Dict$removeHelp, key, dict);
- if ((_n0.$ === -1) && (!_n0.a)) {
- var _n1 = _n0.a;
- var k = _n0.b;
- var v = _n0.c;
- var l = _n0.d;
- var r = _n0.e;
- return A5(elm$core$Dict$RBNode_elm_builtin, 1, k, v, l, r);
- } else {
- var x = _n0;
- return x;
- }
- });
-var elm$core$Dict$update = F3(
- function (targetKey, alter, dictionary) {
- var _n0 = alter(
- A2(elm$core$Dict$get, targetKey, dictionary));
- if (!_n0.$) {
- var value = _n0.a;
- return A3(elm$core$Dict$insert, targetKey, value, dictionary);
- } else {
- return A2(elm$core$Dict$remove, targetKey, dictionary);
- }
- });
-var elm$core$Maybe$isJust = function (maybe) {
- if (!maybe.$) {
- return true;
- } else {
- return false;
- }
-};
-var elm$core$Result$map = F2(
- function (func, ra) {
- if (!ra.$) {
- var a = ra.a;
- return elm$core$Result$Ok(
- func(a));
- } else {
- var e = ra.a;
- return elm$core$Result$Err(e);
- }
- });
-var elm$http$Http$BadPayload = F2(
- function (a, b) {
- return {$: 4, a: a, b: b};
- });
-var elm$http$Http$BadStatus = function (a) {
- return {$: 3, a: a};
-};
-var elm$http$Http$BadUrl = function (a) {
- return {$: 0, a: a};
-};
-var elm$http$Http$NetworkError = {$: 2};
-var elm$http$Http$Timeout = {$: 1};
-var elm$http$Http$Internal$FormDataBody = function (a) {
- return {$: 2, a: a};
-};
-var elm$http$Http$Internal$isStringBody = function (body) {
- if (body.$ === 1) {
- return true;
- } else {
- return false;
- }
-};
-var elm$http$Http$expectStringResponse = _Http_expectStringResponse;
-var elm$http$Http$expectString = elm$http$Http$expectStringResponse(
- function (response) {
- return elm$core$Result$Ok(response.bm);
- });
-var elm$core$Basics$identity = function (x) {
- return x;
-};
-var elm$http$Http$Internal$Request = elm$core$Basics$identity;
-var elm$http$Http$request = elm$core$Basics$identity;
-var elm$http$Http$getString = function (url) {
- return elm$http$Http$request(
- {bm: elm$http$Http$emptyBody, ab: elm$http$Http$expectString, V: _List_Nil, ad: 'GET', aC: elm$core$Maybe$Nothing, b2: url, aD: false});
-};
-var elm$core$Basics$composeL = F3(
- function (g, f, x) {
- return g(
- f(x));
- });
-var elm$core$Task$Perform = elm$core$Basics$identity;
-var elm$core$Task$andThen = _Scheduler_andThen;
-var elm$core$Task$succeed = _Scheduler_succeed;
-var elm$core$Task$init = elm$core$Task$succeed(0);
-var elm$core$List$foldrHelper = F4(
- function (fn, acc, ctr, ls) {
- if (!ls.b) {
- return acc;
- } else {
- var a = ls.a;
- var r1 = ls.b;
- if (!r1.b) {
- return A2(fn, a, acc);
- } else {
- var b = r1.a;
- var r2 = r1.b;
- if (!r2.b) {
- return A2(
- fn,
- a,
- A2(fn, b, acc));
- } else {
- var c = r2.a;
- var r3 = r2.b;
- if (!r3.b) {
- return A2(
- fn,
- a,
- A2(
- fn,
- b,
- A2(fn, c, acc)));
- } else {
- var d = r3.a;
- var r4 = r3.b;
- var res = (ctr > 500) ? A3(
- elm$core$List$foldl,
- fn,
- acc,
- elm$core$List$reverse(r4)) : A4(elm$core$List$foldrHelper, fn, acc, ctr + 1, r4);
- return A2(
- fn,
- a,
- A2(
- fn,
- b,
- A2(
- fn,
- c,
- A2(fn, d, res))));
- }
- }
- }
- }
- });
-var elm$core$List$foldr = F3(
- function (fn, acc, ls) {
- return A4(elm$core$List$foldrHelper, fn, acc, 0, ls);
- });
-var elm$core$List$map = F2(
- function (f, xs) {
- return A3(
- elm$core$List$foldr,
- F2(
- function (x, acc) {
- return A2(
- elm$core$List$cons,
- f(x),
- acc);
- }),
- _List_Nil,
- xs);
- });
-var elm$core$Task$map = F2(
- function (func, taskA) {
- return A2(
- elm$core$Task$andThen,
- function (a) {
- return elm$core$Task$succeed(
- func(a));
- },
- taskA);
- });
-var elm$core$Task$map2 = F3(
- function (func, taskA, taskB) {
- return A2(
- elm$core$Task$andThen,
- function (a) {
- return A2(
- elm$core$Task$andThen,
- function (b) {
- return elm$core$Task$succeed(
- A2(func, a, b));
- },
- taskB);
- },
- taskA);
- });
-var elm$core$Task$sequence = function (tasks) {
- return A3(
- elm$core$List$foldr,
- elm$core$Task$map2(elm$core$List$cons),
- elm$core$Task$succeed(_List_Nil),
- tasks);
-};
-var elm$core$Platform$sendToApp = _Platform_sendToApp;
-var elm$core$Task$spawnCmd = F2(
- function (router, _n0) {
- var task = _n0;
- return _Scheduler_spawn(
- A2(
- elm$core$Task$andThen,
- elm$core$Platform$sendToApp(router),
- task));
- });
-var elm$core$Task$onEffects = F3(
- function (router, commands, state) {
- return A2(
- elm$core$Task$map,
- function (_n0) {
- return 0;
- },
- elm$core$Task$sequence(
- A2(
- elm$core$List$map,
- elm$core$Task$spawnCmd(router),
- commands)));
- });
-var elm$core$Task$onSelfMsg = F3(
- function (_n0, _n1, _n2) {
- return elm$core$Task$succeed(0);
- });
-var elm$core$Task$cmdMap = F2(
- function (tagger, _n0) {
- var task = _n0;
- return A2(elm$core$Task$map, tagger, task);
- });
-_Platform_effectManagers['Task'] = _Platform_createManager(elm$core$Task$init, elm$core$Task$onEffects, elm$core$Task$onSelfMsg, elm$core$Task$cmdMap);
-var elm$core$Task$command = _Platform_leaf('Task');
-var elm$core$Task$onError = _Scheduler_onError;
-var elm$core$Task$attempt = F2(
- function (resultToMessage, task) {
- return elm$core$Task$command(
- A2(
- elm$core$Task$onError,
- A2(
- elm$core$Basics$composeL,
- A2(elm$core$Basics$composeL, elm$core$Task$succeed, resultToMessage),
- elm$core$Result$Err),
- A2(
- elm$core$Task$andThen,
- A2(
- elm$core$Basics$composeL,
- A2(elm$core$Basics$composeL, elm$core$Task$succeed, resultToMessage),
- elm$core$Result$Ok),
- task)));
- });
-var elm$http$Http$toTask = function (_n0) {
- var request_ = _n0;
- return A2(_Http_toTask, request_, elm$core$Maybe$Nothing);
-};
-var elm$http$Http$send = F2(
- function (resultToMessage, request_) {
- return A2(
- elm$core$Task$attempt,
- resultToMessage,
- elm$http$Http$toTask(request_));
- });
-var author$project$Main$fetchStyle = F2(
- function (styleUrl, token) {
- return A2(
- elm$http$Http$send,
- author$project$Main$LoadedStyle,
- elm$http$Http$getString(
- A3(elm$core$String$replace, 'mapbox://styles/', 'https://api.mapbox.com/styles/v1/', styleUrl) + ('?access_token=' + token)));
- });
-var author$project$Main$update = F2(
- function (msg, model) {
- switch (msg.$) {
- case 0:
- if (!msg.a.$) {
- var style = msg.a.a;
- return _Utils_Tuple2(
- _Utils_update(
- model,
- {
- aB: elm$core$Maybe$Just(style)
- }),
- elm$core$Platform$Cmd$none);
- } else {
- var e = msg.a.a;
- return _Utils_Tuple2(
- _Utils_update(
- model,
- {
- aa: elm$core$Maybe$Just(
- author$project$Main$errorToString(e))
- }),
- elm$core$Platform$Cmd$none);
- }
- case 1:
- return _Utils_Tuple2(
- model,
- A2(author$project$Main$fetchStyle, model.X, model.Y));
- case 2:
- var s = msg.a;
- return _Utils_Tuple2(
- _Utils_update(
- model,
- {X: s}),
- elm$core$Platform$Cmd$none);
- default:
- var s = msg.a;
- return _Utils_Tuple2(
- _Utils_update(
- model,
- {Y: s}),
- elm$core$Platform$Cmd$none);
- }
- });
-var stil4m$elm_syntax$Elm$Syntax$Node$Node = F2(
- function (a, b) {
- return {$: 0, a: a, b: b};
- });
-var stil4m$elm_syntax$Elm$Syntax$Range$emptyRange = {
- bA: {aI: 0, a7: 0},
- bY: {aI: 0, a7: 0}
-};
-var author$project$Decoder$node = stil4m$elm_syntax$Elm$Syntax$Node$Node(stil4m$elm_syntax$Elm$Syntax$Range$emptyRange);
-var author$project$Decoder$wrapNodes = elm$core$List$map(author$project$Decoder$node);
-var stil4m$elm_syntax$Elm$Syntax$Declaration$FunctionDeclaration = function (a) {
- return {$: 0, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Expression$Application = function (a) {
- return {$: 1, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue = F2(
- function (a, b) {
- return {$: 3, a: a, b: b};
- });
-var stil4m$elm_syntax$Elm$Syntax$Expression$RecordExpr = function (a) {
- return {$: 18, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$TypeAnnotation$Typed = F2(
- function (a, b) {
- return {$: 1, a: a, b: b};
- });
-var author$project$Decoder$declarations = function (styleDec) {
- return _List_fromArray(
- [
- stil4m$elm_syntax$Elm$Syntax$Declaration$FunctionDeclaration(
- {
- bv: author$project$Decoder$node(
- {
- bk: _List_Nil,
- bC: author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Application(
- author$project$Decoder$wrapNodes(
- _List_fromArray(
- [
- A2(stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue, _List_Nil, 'Style'),
- stil4m$elm_syntax$Elm$Syntax$Expression$RecordExpr(styleDec)
- ])))),
- ae: author$project$Decoder$node('style')
- }),
- by: elm$core$Maybe$Nothing,
- bX: elm$core$Maybe$Just(
- author$project$Decoder$node(
- {
- ae: author$project$Decoder$node('style'),
- b0: author$project$Decoder$node(
- A2(
- stil4m$elm_syntax$Elm$Syntax$TypeAnnotation$Typed,
- author$project$Decoder$node(
- _Utils_Tuple2(_List_Nil, 'Style')),
- _List_Nil))
- }))
- })
- ]);
-};
-var stil4m$elm_syntax$Elm$Syntax$Exposing$Explicit = function (a) {
- return {$: 1, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose = function (a) {
- return {$: 1, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Exposing$TypeExpose = function (a) {
- return {$: 3, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Module$NormalModule = function (a) {
- return {$: 0, a: a};
-};
-var author$project$Decoder$file = function (styleDec) {
- return {
- bt: _List_Nil,
- bw: A2(
- elm$core$List$map,
- author$project$Decoder$node,
- author$project$Decoder$declarations(styleDec)),
- bI: _List_fromArray(
- [
- author$project$Decoder$node(
- {
- M: elm$core$Maybe$Just(
- stil4m$elm_syntax$Elm$Syntax$Exposing$Explicit(
- _List_fromArray(
- [
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$TypeExpose(
- {
- ae: 'Style',
- bR: elm$core$Maybe$Just(stil4m$elm_syntax$Elm$Syntax$Range$emptyRange)
- }))
- ]))),
- W: elm$core$Maybe$Just(
- author$project$Decoder$node(
- _List_fromArray(
- ['Style']))),
- O: author$project$Decoder$node(
- _List_fromArray(
- ['Mapbox', 'Style']))
- }),
- author$project$Decoder$node(
- {
- M: elm$core$Maybe$Nothing,
- W: elm$core$Maybe$Just(
- author$project$Decoder$node(
- _List_fromArray(
- ['Source']))),
- O: author$project$Decoder$node(
- _List_fromArray(
- ['Mapbox', 'Source']))
- }),
- author$project$Decoder$node(
- {
- M: elm$core$Maybe$Nothing,
- W: elm$core$Maybe$Just(
- author$project$Decoder$node(
- _List_fromArray(
- ['Layer']))),
- O: author$project$Decoder$node(
- _List_fromArray(
- ['Mapbox', 'Layer']))
- }),
- author$project$Decoder$node(
- {
- M: elm$core$Maybe$Just(
- stil4m$elm_syntax$Elm$Syntax$Exposing$Explicit(
- _List_fromArray(
- [
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('str')),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('float')),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('int')),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('true')),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('false'))
- ]))),
- W: elm$core$Maybe$Just(
- author$project$Decoder$node(
- _List_fromArray(
- ['E']))),
- O: author$project$Decoder$node(
- _List_fromArray(
- ['Mapbox', 'Expression']))
- })
- ]),
- bO: author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Module$NormalModule(
- {
- M: author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$Explicit(
- _List_fromArray(
- [
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Exposing$FunctionExpose('style'))
- ]))),
- O: author$project$Decoder$node(
- _List_fromArray(
- ['Style']))
- }))
- };
-};
-var author$project$Decoder$addBogusRange = F2(
- function (index, _n0) {
- var v = _n0.b;
- return A2(
- stil4m$elm_syntax$Elm$Syntax$Node$Node,
- {
- bA: {aI: 0, a7: index + 1},
- bY: {aI: 0, a7: index}
- },
- v);
- });
-var elm$core$Basics$composeR = F3(
- function (f, g, x) {
- return g(
- f(x));
- });
-var stil4m$elm_syntax$Elm$Syntax$Expression$ParenthesizedExpression = function (a) {
- return {$: 14, a: a};
-};
-var author$project$Decoder$parens = A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Expression$ParenthesizedExpression, author$project$Decoder$node);
-var author$project$Decoder$call = F3(
- function (ns, name, args) {
- return author$project$Decoder$parens(
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Application(
- A2(
- elm$core$List$cons,
- author$project$Decoder$node(
- A2(
- stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue,
- _List_fromArray(
- [ns]),
- name)),
- args))));
- });
-var elm$json$Json$Decode$map2 = _Json_map2;
-var elm$json$Json$Decode$succeed = _Json_succeed;
-var author$project$Decoder$combine = A2(
- elm$core$List$foldr,
- elm$json$Json$Decode$map2(elm$core$List$cons),
- elm$json$Json$Decode$succeed(_List_Nil));
-var elm$core$Basics$and = _Basics_and;
-var elm$core$Basics$or = _Basics_or;
-var elm$core$Char$toCode = _Char_toCode;
-var elm$core$Char$isLower = function (_char) {
- var code = elm$core$Char$toCode(_char);
- return (97 <= code) && (code <= 122);
-};
-var elm$core$Char$isUpper = function (_char) {
- var code = elm$core$Char$toCode(_char);
- return (code <= 90) && (65 <= code);
-};
-var elm$core$Char$isAlpha = function (_char) {
- return elm$core$Char$isLower(_char) || elm$core$Char$isUpper(_char);
-};
-var elm$core$Char$isDigit = function (_char) {
- var code = elm$core$Char$toCode(_char);
- return (code <= 57) && (48 <= code);
-};
-var elm$core$Char$isAlphaNum = function (_char) {
- return elm$core$Char$isLower(_char) || (elm$core$Char$isUpper(_char) || elm$core$Char$isDigit(_char));
-};
-var elm$core$List$length = function (xs) {
- return A3(
- elm$core$List$foldl,
- F2(
- function (_n0, i) {
- return i + 1;
- }),
- 0,
- xs);
-};
-var elm$core$List$map2 = _List_map2;
-var elm$core$List$rangeHelp = F3(
- function (lo, hi, list) {
- rangeHelp:
- while (true) {
- if (_Utils_cmp(lo, hi) < 1) {
- var $temp$lo = lo,
- $temp$hi = hi - 1,
- $temp$list = A2(elm$core$List$cons, hi, list);
- lo = $temp$lo;
- hi = $temp$hi;
- list = $temp$list;
- continue rangeHelp;
- } else {
- return list;
- }
- }
- });
-var elm$core$List$range = F2(
- function (lo, hi) {
- return A3(elm$core$List$rangeHelp, lo, hi, _List_Nil);
- });
-var elm$core$List$indexedMap = F2(
- function (f, xs) {
- return A3(
- elm$core$List$map2,
- f,
- A2(
- elm$core$List$range,
- 0,
- elm$core$List$length(xs) - 1),
- xs);
- });
-var elm$core$String$all = _String_all;
-var elm$core$String$fromInt = _String_fromNumber;
-var elm$core$String$uncons = _String_uncons;
-var elm$json$Json$Decode$indent = function (str) {
- return A2(
- elm$core$String$join,
- '\n ',
- A2(elm$core$String$split, '\n', str));
-};
-var elm$json$Json$Encode$encode = _Json_encode;
-var elm$json$Json$Decode$errorOneOf = F2(
- function (i, error) {
- return '\n\n(' + (elm$core$String$fromInt(i + 1) + (') ' + elm$json$Json$Decode$indent(
- elm$json$Json$Decode$errorToString(error))));
- });
-var elm$json$Json$Decode$errorToString = function (error) {
- return A2(elm$json$Json$Decode$errorToStringHelp, error, _List_Nil);
-};
-var elm$json$Json$Decode$errorToStringHelp = F2(
- function (error, context) {
- errorToStringHelp:
- while (true) {
- switch (error.$) {
- case 0:
- var f = error.a;
- var err = error.b;
- var isSimple = function () {
- var _n1 = elm$core$String$uncons(f);
- if (_n1.$ === 1) {
- return false;
- } else {
- var _n2 = _n1.a;
- var _char = _n2.a;
- var rest = _n2.b;
- return elm$core$Char$isAlpha(_char) && A2(elm$core$String$all, elm$core$Char$isAlphaNum, rest);
- }
- }();
- var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']'));
- var $temp$error = err,
- $temp$context = A2(elm$core$List$cons, fieldName, context);
- error = $temp$error;
- context = $temp$context;
- continue errorToStringHelp;
- case 1:
- var i = error.a;
- var err = error.b;
- var indexName = '[' + (elm$core$String$fromInt(i) + ']');
- var $temp$error = err,
- $temp$context = A2(elm$core$List$cons, indexName, context);
- error = $temp$error;
- context = $temp$context;
- continue errorToStringHelp;
- case 2:
- var errors = error.a;
- if (!errors.b) {
- return 'Ran into a Json.Decode.oneOf with no possibilities' + function () {
- if (!context.b) {
- return '!';
- } else {
- return ' at json' + A2(
- elm$core$String$join,
- '',
- elm$core$List$reverse(context));
- }
- }();
- } else {
- if (!errors.b.b) {
- var err = errors.a;
- var $temp$error = err,
- $temp$context = context;
- error = $temp$error;
- context = $temp$context;
- continue errorToStringHelp;
- } else {
- var starter = function () {
- if (!context.b) {
- return 'Json.Decode.oneOf';
- } else {
- return 'The Json.Decode.oneOf at json' + A2(
- elm$core$String$join,
- '',
- elm$core$List$reverse(context));
- }
- }();
- var introduction = starter + (' failed in the following ' + (elm$core$String$fromInt(
- elm$core$List$length(errors)) + ' ways:'));
- return A2(
- elm$core$String$join,
- '\n\n',
- A2(
- elm$core$List$cons,
- introduction,
- A2(elm$core$List$indexedMap, elm$json$Json$Decode$errorOneOf, errors)));
- }
- }
- default:
- var msg = error.a;
- var json = error.b;
- var introduction = function () {
- if (!context.b) {
- return 'Problem with the given value:\n\n';
- } else {
- return 'Problem with the value at json' + (A2(
- elm$core$String$join,
- '',
- elm$core$List$reverse(context)) + ':\n\n ');
- }
- }();
- return introduction + (elm$json$Json$Decode$indent(
- A2(elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg));
- }
- }
- });
-var elm$json$Json$Decode$fail = _Json_fail;
-var author$project$Decoder$resultToDecoder = function (res) {
- if (!res.$) {
- var a = res.a;
- return elm$json$Json$Decode$succeed(a);
- } else {
- var e = res.a;
- return elm$json$Json$Decode$fail(
- elm$json$Json$Decode$errorToString(e));
- }
-};
-var elm$json$Json$Decode$decodeValue = _Json_run;
-var elm$json$Json$Decode$map = _Json_map1;
-var elm$core$List$intersperse = F2(
- function (sep, xs) {
- if (!xs.b) {
- return _List_Nil;
- } else {
- var hd = xs.a;
- var tl = xs.b;
- var step = F2(
- function (x, rest) {
- return A2(
- elm$core$List$cons,
- sep,
- A2(elm$core$List$cons, x, rest));
- });
- var spersed = A3(elm$core$List$foldr, step, _List_Nil, tl);
- return A2(elm$core$List$cons, hd, spersed);
- }
- });
-var elm$core$String$concat = function (strings) {
- return A2(elm$core$String$join, '', strings);
-};
-var elm$core$Basics$not = _Basics_not;
-var elm$core$Char$toLower = _Char_toLower;
-var elm$core$Char$toUpper = _Char_toUpper;
-var elm$core$String$fromList = _String_fromList;
-var elm$core$String$foldr = _String_foldr;
-var elm$core$String$toList = function (string) {
- return A3(elm$core$String$foldr, elm$core$List$cons, _List_Nil, string);
-};
-var the_sett$elm_string_case$String$Case$ContinueWordCaps = 2;
-var the_sett$elm_string_case$String$Case$ContinueWordLower = 3;
-var the_sett$elm_string_case$String$Case$Initial = 0;
-var the_sett$elm_string_case$String$Case$StartWord = 1;
-var the_sett$elm_string_case$String$Case$isLetterOrDigit = function (_char) {
- return elm$core$Char$isUpper(_char) || (elm$core$Char$isLower(_char) || elm$core$Char$isDigit(_char));
-};
-var the_sett$elm_string_case$String$Case$isUpperCase = elm$core$Char$isUpper;
-var the_sett$elm_string_case$String$Case$split = F3(
- function (firstLetterUpper, firstLetterOfWordUpper, value) {
- var writeChar = F2(
- function (_char, state) {
- return (((!state.F) && state.m) || (state.F && firstLetterUpper)) ? _Utils_update(
- state,
- {
- n: A2(
- elm$core$List$cons,
- elm$core$Char$toUpper(_char),
- state.n)
- }) : _Utils_update(
- state,
- {
- n: A2(
- elm$core$List$cons,
- elm$core$Char$toLower(_char),
- state.n)
- });
- });
- var wordBreak = F2(
- function (condition, state) {
- return condition ? _Utils_update(
- state,
- {
- n: _List_Nil,
- D: A2(
- elm$core$List$cons,
- elm$core$String$fromList(
- elm$core$List$reverse(state.n)),
- state.D)
- }) : _Utils_update(
- state,
- {n: state.n, D: state.D});
- });
- var stateTxWhitespace = F2(
- function (_char, state) {
- return _Utils_update(
- state,
- {k: 0, m: false});
- });
- var stateTxUpperCase = F2(
- function (_char, state) {
- return function (nextState) {
- return _Utils_update(
- nextState,
- {F: false});
- }(
- A2(
- writeChar,
- _char,
- function () {
- var _n1 = state.k;
- switch (_n1) {
- case 0:
- return A2(
- wordBreak,
- !state.G,
- _Utils_update(
- state,
- {G: false, k: 1, m: firstLetterOfWordUpper}));
- case 1:
- return _Utils_update(
- state,
- {k: 2, m: false});
- case 2:
- return _Utils_update(
- state,
- {k: 2, m: false});
- default:
- return A2(
- wordBreak,
- true,
- _Utils_update(
- state,
- {k: 1, m: firstLetterOfWordUpper}));
- }
- }()));
- });
- var stateTxLetterOrDigit = F2(
- function (_char, state) {
- return function (nextState) {
- return _Utils_update(
- nextState,
- {F: false});
- }(
- A2(
- writeChar,
- _char,
- function () {
- var _n0 = state.k;
- switch (_n0) {
- case 0:
- return A2(
- wordBreak,
- !state.G,
- _Utils_update(
- state,
- {G: false, k: 1, m: firstLetterOfWordUpper}));
- case 1:
- return _Utils_update(
- state,
- {k: 3, m: false});
- case 2:
- return _Utils_update(
- state,
- {k: 3, m: false});
- default:
- return _Utils_update(
- state,
- {k: 3, m: false});
- }
- }()));
- });
- var stateFn = F2(
- function (_char, state) {
- return the_sett$elm_string_case$String$Case$isUpperCase(_char) ? A2(stateTxUpperCase, _char, state) : (the_sett$elm_string_case$String$Case$isLetterOrDigit(_char) ? A2(stateTxLetterOrDigit, _char, state) : A2(stateTxWhitespace, _char, state));
- });
- var start = {n: _List_Nil, F: true, G: true, k: 0, m: false, D: _List_Nil};
- var appendLastWord = function (state) {
- return _Utils_eq(state.n, _List_Nil) ? state : A2(wordBreak, true, state);
- };
- return appendLastWord(
- A3(
- elm$core$List$foldl,
- function (_char) {
- return function (state) {
- return A2(stateFn, _char, state);
- };
- },
- start,
- elm$core$String$toList(value))).D;
- });
-var the_sett$elm_string_case$String$Case$convertCase = F4(
- function (separator, firstLetterUpper, firstLetterOfWordUpper, value) {
- return elm$core$String$concat(
- A2(
- elm$core$List$intersperse,
- separator,
- elm$core$List$reverse(
- A3(the_sett$elm_string_case$String$Case$split, firstLetterUpper, firstLetterOfWordUpper, value))));
- });
-var the_sett$elm_string_case$String$Case$toCamelCaseLower = function (name) {
- return A4(the_sett$elm_string_case$String$Case$convertCase, '', false, true, name);
-};
-var author$project$Decoder$decodeAttr = F3(
- function (attrName, expressionNodeDecoder, attrValue) {
- return elm$core$Maybe$Just(
- A2(
- elm$json$Json$Decode$map,
- function (v) {
- return A3(
- author$project$Decoder$call,
- 'Layer',
- the_sett$elm_string_case$String$Case$toCamelCaseLower(attrName),
- _List_fromArray(
- [v]));
- },
- author$project$Decoder$resultToDecoder(
- A2(elm$json$Json$Decode$decodeValue, expressionNodeDecoder, attrValue))));
- });
-var author$project$Decoder$evalue = function (name) {
- return author$project$Decoder$node(
- A2(stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue, _List_Nil, name));
-};
-var elm$json$Json$Decode$bool = _Json_decodeBool;
-var author$project$Decoder$decodeBool = A2(
- elm$json$Json$Decode$map,
- function (b) {
- return b ? author$project$Decoder$evalue('true') : author$project$Decoder$evalue('false');
- },
- elm$json$Json$Decode$bool);
-var author$project$Decoder$subdecode = F2(
- function (d, v) {
- return author$project$Decoder$resultToDecoder(
- A2(elm$json$Json$Decode$decodeValue, d, v));
- });
-var elm$json$Json$Decode$andThen = _Json_andThen;
-var elm$json$Json$Decode$list = _Json_decodeList;
-var elm$json$Json$Decode$value = _Json_decodeValue;
-var author$project$Decoder$decodeTail = function (itemDecoder) {
- return A2(
- elm$json$Json$Decode$andThen,
- function (l) {
- if (!l.b) {
- return elm$json$Json$Decode$fail('Can\'t get tail of empty');
- } else {
- var head = l.a;
- var t = l.b;
- return author$project$Decoder$combine(
- A2(
- elm$core$List$map,
- author$project$Decoder$subdecode(itemDecoder),
- t));
- }
- },
- elm$json$Json$Decode$list(elm$json$Json$Decode$value));
-};
-var author$project$Decoder$ecall = F2(
- function (name, arg) {
- return author$project$Decoder$parens(
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Application(
- _List_fromArray(
- [
- author$project$Decoder$node(
- A2(stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue, _List_Nil, name)),
- arg
- ]))));
- });
-var stil4m$elm_syntax$Elm$Syntax$Expression$Floatable = function (a) {
- return {$: 9, a: a};
-};
-var author$project$Decoder$float = A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Expression$Floatable, author$project$Decoder$node);
-var stil4m$elm_syntax$Elm$Syntax$Expression$ListExpr = function (a) {
- return {$: 19, a: a};
-};
-var author$project$Decoder$list = function (l) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$ListExpr(l));
-};
-var stil4m$elm_syntax$Elm$Syntax$Expression$Literal = function (a) {
- return {$: 11, a: a};
-};
-var author$project$Decoder$str = function (s) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Literal(s));
-};
-var author$project$Decoder$todoExpr = function (msg) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$ParenthesizedExpression(
- A3(
- author$project$Decoder$call,
- 'Debug',
- 'todo',
- _List_fromArray(
- [
- author$project$Decoder$str(msg)
- ]))));
-};
-var stil4m$elm_syntax$Elm$Syntax$Expression$OperatorApplication = F4(
- function (a, b, c, d) {
- return {$: 2, a: a, b: b, c: c, d: d};
- });
-var stil4m$elm_syntax$Elm$Syntax$Infix$Left = 0;
-var author$project$Decoder$pipelineCall = F3(
- function (ns, name, args) {
- if (args.b) {
- var fst = args.a;
- var rest = args.b;
- return author$project$Decoder$parens(
- author$project$Decoder$node(
- A4(
- stil4m$elm_syntax$Elm$Syntax$Expression$OperatorApplication,
- '|>',
- 0,
- fst,
- A3(author$project$Decoder$call, ns, name, rest))));
- } else {
- return author$project$Decoder$todoExpr('Wrong number of arguments passed to ' + (ns + ('.' + name)));
- }
- });
-var author$project$Decoder$value = F2(
- function (ns, name) {
- return author$project$Decoder$node(
- A2(
- stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue,
- _List_fromArray(
- [ns]),
- name));
- });
-var elm$core$List$drop = F2(
- function (n, list) {
- drop:
- while (true) {
- if (n <= 0) {
- return list;
- } else {
- if (!list.b) {
- return list;
- } else {
- var x = list.a;
- var xs = list.b;
- var $temp$n = n - 1,
- $temp$list = xs;
- n = $temp$n;
- list = $temp$list;
- continue drop;
- }
- }
- }
- });
-var elm$core$List$singleton = function (value) {
- return _List_fromArray(
- [value]);
-};
-var elm$json$Json$Decode$float = _Json_decodeFloat;
-var elm$json$Json$Decode$index = _Json_decodeIndex;
-var elm$json$Json$Decode$oneOf = _Json_oneOf;
-var elm$json$Json$Decode$string = _Json_decodeString;
-function author$project$Decoder$cyclic$decodeLegacyFilter() {
- var decodeVals = elm$json$Json$Decode$list(
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$str,
- author$project$Decoder$ecall('str')),
- elm$json$Json$Decode$string),
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$float,
- author$project$Decoder$ecall('float')),
- elm$json$Json$Decode$float),
- author$project$Decoder$decodeBool
- ])));
- var decodeVal = A2(
- elm$json$Json$Decode$index,
- 2,
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$str,
- author$project$Decoder$ecall('str')),
- elm$json$Json$Decode$string),
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$float,
- author$project$Decoder$ecall('float')),
- elm$json$Json$Decode$float),
- author$project$Decoder$decodeBool
- ])));
- var decodeProp = A2(
- elm$json$Json$Decode$map,
- function (prop) {
- switch (prop) {
- case '$type':
- return A2(author$project$Decoder$value, 'E', 'geometryType');
- case '$id':
- return A2(author$project$Decoder$value, 'E', 'id');
- default:
- return A3(
- author$project$Decoder$call,
- 'E',
- 'getProperty',
- _List_fromArray(
- [
- A2(
- author$project$Decoder$ecall,
- 'str',
- author$project$Decoder$str(prop))
- ]));
- }
- },
- A2(elm$json$Json$Decode$index, 1, elm$json$Json$Decode$string));
- return A2(
- elm$json$Json$Decode$andThen,
- function (filter) {
- switch (filter) {
- case 'all':
- return A2(
- elm$json$Json$Decode$map,
- function (filters) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'all',
- _List_fromArray(
- [
- author$project$Decoder$list(filters)
- ]));
- },
- author$project$Decoder$decodeTail(
- author$project$Decoder$cyclic$decodeLegacyFilter()));
- case 'any':
- return A2(
- elm$json$Json$Decode$map,
- function (filters) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'any',
- _List_fromArray(
- [
- author$project$Decoder$list(filters)
- ]));
- },
- author$project$Decoder$decodeTail(
- author$project$Decoder$cyclic$decodeLegacyFilter()));
- case 'none':
- return A2(
- elm$json$Json$Decode$map,
- function (filters) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'all',
- _List_fromArray(
- [
- author$project$Decoder$list(
- A2(
- elm$core$List$map,
- function (f) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'not',
- _List_fromArray(
- [f]));
- },
- filters))
- ]));
- },
- author$project$Decoder$decodeTail(
- author$project$Decoder$cyclic$decodeLegacyFilter()));
- case 'has':
- return A2(
- elm$json$Json$Decode$map,
- function (prop) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'hasProperty',
- _List_fromArray(
- [
- A2(
- author$project$Decoder$ecall,
- 'str',
- author$project$Decoder$str(prop))
- ]));
- },
- A2(elm$json$Json$Decode$index, 1, elm$json$Json$Decode$string));
- case '!has':
- return A2(
- elm$json$Json$Decode$map,
- function (prop) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'not',
- _List_fromArray(
- [
- A3(
- author$project$Decoder$call,
- 'E',
- 'hasProperty',
- _List_fromArray(
- [
- A2(
- author$project$Decoder$ecall,
- 'str',
- author$project$Decoder$str(prop))
- ]))
- ]));
- },
- A2(elm$json$Json$Decode$index, 1, elm$json$Json$Decode$string));
- case '==':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'isEqual',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case '!=':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'notEqual',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case '>':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'greaterThan',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case '>=':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'greaterThanOrEqual',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case '<':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'lessThan',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case '<=':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, val) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'lessThanOrEqual',
- _List_fromArray(
- [prop, val]));
- }),
- decodeProp,
- decodeVal);
- case 'in':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, values) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'any',
- elm$core$List$singleton(
- author$project$Decoder$list(
- A2(
- elm$core$List$map,
- function (v) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'isEqual',
- _List_fromArray(
- [prop, v]));
- },
- A2(elm$core$List$drop, 2, values)))));
- }),
- decodeProp,
- decodeVals);
- case '!in':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (prop, values) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'all',
- elm$core$List$singleton(
- author$project$Decoder$list(
- A2(
- elm$core$List$map,
- function (v) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'notEqual',
- _List_fromArray(
- [prop, v]));
- },
- A2(elm$core$List$drop, 2, values)))));
- }),
- decodeProp,
- decodeVals);
- default:
- return elm$json$Json$Decode$fail('not actually a legacy filter');
- }
- },
- A2(elm$json$Json$Decode$index, 0, elm$json$Json$Decode$string));
-}
-var author$project$Decoder$decodeLegacyFilter = author$project$Decoder$cyclic$decodeLegacyFilter();
-author$project$Decoder$cyclic$decodeLegacyFilter = function () {
- return author$project$Decoder$decodeLegacyFilter;
-};
-var elm$core$Basics$round = _Basics_round;
-var elm$parser$Parser$ExpectingFloat = {$: 5};
-var elm$parser$Parser$Advanced$Parser = elm$core$Basics$identity;
-var elm$parser$Parser$Advanced$consumeBase = _Parser_consumeBase;
-var elm$parser$Parser$Advanced$consumeBase16 = _Parser_consumeBase16;
-var elm$core$String$slice = _String_slice;
-var elm$core$String$toFloat = _String_toFloat;
-var elm$parser$Parser$Advanced$Bad = F2(
- function (a, b) {
- return {$: 1, a: a, b: b};
- });
-var elm$parser$Parser$Advanced$Good = F3(
- function (a, b, c) {
- return {$: 0, a: a, b: b, c: c};
- });
-var elm$parser$Parser$Advanced$bumpOffset = F2(
- function (newOffset, s) {
- return {aH: s.aH + (newOffset - s.b), c: s.c, d: s.d, b: newOffset, a7: s.a7, a: s.a};
- });
-var elm$parser$Parser$Advanced$chompBase10 = _Parser_chompBase10;
-var elm$core$Basics$negate = function (n) {
- return -n;
-};
-var elm$parser$Parser$Advanced$isAsciiCode = _Parser_isAsciiCode;
-var elm$parser$Parser$Advanced$consumeExp = F2(
- function (offset, src) {
- if (A3(elm$parser$Parser$Advanced$isAsciiCode, 101, offset, src) || A3(elm$parser$Parser$Advanced$isAsciiCode, 69, offset, src)) {
- var eOffset = offset + 1;
- var expOffset = (A3(elm$parser$Parser$Advanced$isAsciiCode, 43, eOffset, src) || A3(elm$parser$Parser$Advanced$isAsciiCode, 45, eOffset, src)) ? (eOffset + 1) : eOffset;
- var newOffset = A2(elm$parser$Parser$Advanced$chompBase10, expOffset, src);
- return _Utils_eq(expOffset, newOffset) ? (-newOffset) : newOffset;
- } else {
- return offset;
- }
- });
-var elm$parser$Parser$Advanced$consumeDotAndExp = F2(
- function (offset, src) {
- return A3(elm$parser$Parser$Advanced$isAsciiCode, 46, offset, src) ? A2(
- elm$parser$Parser$Advanced$consumeExp,
- A2(elm$parser$Parser$Advanced$chompBase10, offset + 1, src),
- src) : A2(elm$parser$Parser$Advanced$consumeExp, offset, src);
- });
-var elm$parser$Parser$Advanced$AddRight = F2(
- function (a, b) {
- return {$: 1, a: a, b: b};
- });
-var elm$parser$Parser$Advanced$DeadEnd = F4(
- function (row, col, problem, contextStack) {
- return {aH: col, bu: contextStack, a$: problem, a7: row};
- });
-var elm$parser$Parser$Advanced$Empty = {$: 0};
-var elm$parser$Parser$Advanced$fromState = F2(
- function (s, x) {
- return A2(
- elm$parser$Parser$Advanced$AddRight,
- elm$parser$Parser$Advanced$Empty,
- A4(elm$parser$Parser$Advanced$DeadEnd, s.a7, s.aH, x, s.c));
- });
-var elm$parser$Parser$Advanced$finalizeInt = F5(
- function (invalid, handler, startOffset, _n0, s) {
- var endOffset = _n0.a;
- var n = _n0.b;
- if (handler.$ === 1) {
- var x = handler.a;
- return A2(
- elm$parser$Parser$Advanced$Bad,
- true,
- A2(elm$parser$Parser$Advanced$fromState, s, x));
- } else {
- var toValue = handler.a;
- return _Utils_eq(startOffset, endOffset) ? A2(
- elm$parser$Parser$Advanced$Bad,
- _Utils_cmp(s.b, startOffset) < 0,
- A2(elm$parser$Parser$Advanced$fromState, s, invalid)) : A3(
- elm$parser$Parser$Advanced$Good,
- true,
- toValue(n),
- A2(elm$parser$Parser$Advanced$bumpOffset, endOffset, s));
- }
- });
-var elm$parser$Parser$Advanced$fromInfo = F4(
- function (row, col, x, context) {
- return A2(
- elm$parser$Parser$Advanced$AddRight,
- elm$parser$Parser$Advanced$Empty,
- A4(elm$parser$Parser$Advanced$DeadEnd, row, col, x, context));
- });
-var elm$parser$Parser$Advanced$finalizeFloat = F6(
- function (invalid, expecting, intSettings, floatSettings, intPair, s) {
- var intOffset = intPair.a;
- var floatOffset = A2(elm$parser$Parser$Advanced$consumeDotAndExp, intOffset, s.a);
- if (floatOffset < 0) {
- return A2(
- elm$parser$Parser$Advanced$Bad,
- true,
- A4(elm$parser$Parser$Advanced$fromInfo, s.a7, s.aH - (floatOffset + s.b), invalid, s.c));
- } else {
- if (_Utils_eq(s.b, floatOffset)) {
- return A2(
- elm$parser$Parser$Advanced$Bad,
- false,
- A2(elm$parser$Parser$Advanced$fromState, s, expecting));
- } else {
- if (_Utils_eq(intOffset, floatOffset)) {
- return A5(elm$parser$Parser$Advanced$finalizeInt, invalid, intSettings, s.b, intPair, s);
- } else {
- if (floatSettings.$ === 1) {
- var x = floatSettings.a;
- return A2(
- elm$parser$Parser$Advanced$Bad,
- true,
- A2(elm$parser$Parser$Advanced$fromState, s, invalid));
- } else {
- var toValue = floatSettings.a;
- var _n1 = elm$core$String$toFloat(
- A3(elm$core$String$slice, s.b, floatOffset, s.a));
- if (_n1.$ === 1) {
- return A2(
- elm$parser$Parser$Advanced$Bad,
- true,
- A2(elm$parser$Parser$Advanced$fromState, s, invalid));
- } else {
- var n = _n1.a;
- return A3(
- elm$parser$Parser$Advanced$Good,
- true,
- toValue(n),
- A2(elm$parser$Parser$Advanced$bumpOffset, floatOffset, s));
- }
- }
- }
- }
- }
- });
-var elm$parser$Parser$Advanced$number = function (c) {
- return function (s) {
- if (A3(elm$parser$Parser$Advanced$isAsciiCode, 48, s.b, s.a)) {
- var zeroOffset = s.b + 1;
- var baseOffset = zeroOffset + 1;
- return A3(elm$parser$Parser$Advanced$isAsciiCode, 120, zeroOffset, s.a) ? A5(
- elm$parser$Parser$Advanced$finalizeInt,
- c.bL,
- c.aQ,
- baseOffset,
- A2(elm$parser$Parser$Advanced$consumeBase16, baseOffset, s.a),
- s) : (A3(elm$parser$Parser$Advanced$isAsciiCode, 111, zeroOffset, s.a) ? A5(
- elm$parser$Parser$Advanced$finalizeInt,
- c.bL,
- c.aX,
- baseOffset,
- A3(elm$parser$Parser$Advanced$consumeBase, 8, baseOffset, s.a),
- s) : (A3(elm$parser$Parser$Advanced$isAsciiCode, 98, zeroOffset, s.a) ? A5(
- elm$parser$Parser$Advanced$finalizeInt,
- c.bL,
- c.aF,
- baseOffset,
- A3(elm$parser$Parser$Advanced$consumeBase, 2, baseOffset, s.a),
- s) : A6(
- elm$parser$Parser$Advanced$finalizeFloat,
- c.bL,
- c.aM,
- c.aT,
- c.aN,
- _Utils_Tuple2(zeroOffset, 0),
- s)));
- } else {
- return A6(
- elm$parser$Parser$Advanced$finalizeFloat,
- c.bL,
- c.aM,
- c.aT,
- c.aN,
- A3(elm$parser$Parser$Advanced$consumeBase, 10, s.b, s.a),
- s);
- }
- };
-};
-var elm$parser$Parser$Advanced$float = F2(
- function (expecting, invalid) {
- return elm$parser$Parser$Advanced$number(
- {
- aF: elm$core$Result$Err(invalid),
- aM: expecting,
- aN: elm$core$Result$Ok(elm$core$Basics$identity),
- aQ: elm$core$Result$Err(invalid),
- aT: elm$core$Result$Ok(elm$core$Basics$toFloat),
- bL: invalid,
- aX: elm$core$Result$Err(invalid)
- });
- });
-var elm$parser$Parser$float = A2(elm$parser$Parser$Advanced$float, elm$parser$Parser$ExpectingFloat, elm$parser$Parser$ExpectingFloat);
-var elm$parser$Parser$Advanced$map = F2(
- function (func, _n0) {
- var parse = _n0;
- return function (s0) {
- var _n1 = parse(s0);
- if (!_n1.$) {
- var p = _n1.a;
- var a = _n1.b;
- var s1 = _n1.c;
- return A3(
- elm$parser$Parser$Advanced$Good,
- p,
- func(a),
- s1);
- } else {
- var p = _n1.a;
- var x = _n1.b;
- return A2(elm$parser$Parser$Advanced$Bad, p, x);
- }
- };
- });
-var elm$parser$Parser$map = elm$parser$Parser$Advanced$map;
-var author$project$Color$angle = A2(elm$parser$Parser$map, elm$core$Basics$round, elm$parser$Parser$float);
-var author$project$Color$Color = F4(
- function (r, g, b, a) {
- return {bh: a, bl: b, bF: g, bU: r};
- });
-var author$project$Color$fromHSLA = F4(
- function (hue, sat, light, alpha) {
- var _n0 = _Utils_Tuple3(hue / 360, sat / 100, light / 100);
- var h = _n0.a;
- var s = _n0.b;
- var l = _n0.c;
- var m2 = (l <= 0.5) ? (l * (s + 1)) : ((l + s) - (l * s));
- var m1 = (l * 2) - m2;
- var hueToRgb = function (h__) {
- var h_ = (h__ < 0) ? (h__ + 1) : ((h__ > 1) ? (h__ - 1) : h__);
- return ((h_ * 6) < 1) ? (m1 + (((m2 - m1) * h_) * 6)) : (((h_ * 2) < 1) ? m2 : (((h_ * 3) < 2) ? (m1 + (((m2 - m1) * ((2 / 3) - h_)) * 6)) : m1));
- };
- var b = hueToRgb(h - (1 / 3));
- var g = hueToRgb(h);
- var r = hueToRgb(h + (1 / 3));
- return A4(
- author$project$Color$Color,
- elm$core$Basics$floor(r * 255),
- elm$core$Basics$floor(g * 255),
- elm$core$Basics$floor(b * 255),
- alpha);
- });
-var elm$core$Basics$always = F2(
- function (a, _n0) {
- return a;
- });
-var elm$parser$Parser$Advanced$map2 = F3(
- function (func, _n0, _n1) {
- var parseA = _n0;
- var parseB = _n1;
- return function (s0) {
- var _n2 = parseA(s0);
- if (_n2.$ === 1) {
- var p = _n2.a;
- var x = _n2.b;
- return A2(elm$parser$Parser$Advanced$Bad, p, x);
- } else {
- var p1 = _n2.a;
- var a = _n2.b;
- var s1 = _n2.c;
- var _n3 = parseB(s1);
- if (_n3.$ === 1) {
- var p2 = _n3.a;
- var x = _n3.b;
- return A2(elm$parser$Parser$Advanced$Bad, p1 || p2, x);
- } else {
- var p2 = _n3.a;
- var b = _n3.b;
- var s2 = _n3.c;
- return A3(
- elm$parser$Parser$Advanced$Good,
- p1 || p2,
- A2(func, a, b),
- s2);
- }
- }
- };
- });
-var elm$parser$Parser$Advanced$ignorer = F2(
- function (keepParser, ignoreParser) {
- return A3(elm$parser$Parser$Advanced$map2, elm$core$Basics$always, keepParser, ignoreParser);
- });
-var elm$parser$Parser$ignorer = elm$parser$Parser$Advanced$ignorer;
-var elm$parser$Parser$ExpectingSymbol = function (a) {
- return {$: 8, a: a};
-};
-var elm$parser$Parser$Advanced$Token = F2(
- function (a, b) {
- return {$: 0, a: a, b: b};
- });
-var elm$core$String$isEmpty = function (string) {
- return string === '';
-};
-var elm$parser$Parser$Advanced$isSubString = _Parser_isSubString;
-var elm$parser$Parser$Advanced$token = function (_n0) {
- var str = _n0.a;
- var expecting = _n0.b;
- var progress = !elm$core$String$isEmpty(str);
- return function (s) {
- var _n1 = A5(elm$parser$Parser$Advanced$isSubString, str, s.b, s.a7, s.aH, s.a);
- var newOffset = _n1.a;
- var newRow = _n1.b;
- var newCol = _n1.c;
- return _Utils_eq(newOffset, -1) ? A2(
- elm$parser$Parser$Advanced$Bad,
- false,
- A2(elm$parser$Parser$Advanced$fromState, s, expecting)) : A3(
- elm$parser$Parser$Advanced$Good,
- progress,
- 0,
- {aH: newCol, c: s.c, d: s.d, b: newOffset, a7: newRow, a: s.a});
- };
-};
-var elm$parser$Parser$Advanced$symbol = elm$parser$Parser$Advanced$token;
-var elm$parser$Parser$symbol = function (str) {
- return elm$parser$Parser$Advanced$symbol(
- A2(
- elm$parser$Parser$Advanced$Token,
- str,
- elm$parser$Parser$ExpectingSymbol(str)));
-};
-var author$project$Color$percentage = A2(
- elm$parser$Parser$ignorer,
- A2(elm$parser$Parser$map, elm$core$Basics$round, elm$parser$Parser$float),
- elm$parser$Parser$symbol('%'));
-var elm$parser$Parser$Advanced$keeper = F2(
- function (parseFunc, parseArg) {
- return A3(elm$parser$Parser$Advanced$map2, elm$core$Basics$apL, parseFunc, parseArg);
- });
-var elm$parser$Parser$keeper = elm$parser$Parser$Advanced$keeper;
-var elm$parser$Parser$ExpectingKeyword = function (a) {
- return {$: 9, a: a};
-};
-var elm$parser$Parser$Advanced$isSubChar = _Parser_isSubChar;
-var elm$parser$Parser$Advanced$keyword = function (_n0) {
- var kwd = _n0.a;
- var expecting = _n0.b;
- var progress = !elm$core$String$isEmpty(kwd);
- return function (s) {
- var _n1 = A5(elm$parser$Parser$Advanced$isSubString, kwd, s.b, s.a7, s.aH, s.a);
- var newOffset = _n1.a;
- var newRow = _n1.b;
- var newCol = _n1.c;
- return (_Utils_eq(newOffset, -1) || (0 <= A3(
- elm$parser$Parser$Advanced$isSubChar,
- function (c) {
- return elm$core$Char$isAlphaNum(c) || (c === '_');
- },
- newOffset,
- s.a))) ? A2(
- elm$parser$Parser$Advanced$Bad,
- false,
- A2(elm$parser$Parser$Advanced$fromState, s, expecting)) : A3(
- elm$parser$Parser$Advanced$Good,
- progress,
- 0,
- {aH: newCol, c: s.c, d: s.d, b: newOffset, a7: newRow, a: s.a});
- };
-};
-var elm$parser$Parser$keyword = function (kwd) {
- return elm$parser$Parser$Advanced$keyword(
- A2(
- elm$parser$Parser$Advanced$Token,
- kwd,
- elm$parser$Parser$ExpectingKeyword(kwd)));
-};
-var elm$parser$Parser$Advanced$Append = F2(
- function (a, b) {
- return {$: 2, a: a, b: b};
- });
-var elm$parser$Parser$Advanced$oneOfHelp = F3(
- function (s0, bag, parsers) {
- oneOfHelp:
- while (true) {
- if (!parsers.b) {
- return A2(elm$parser$Parser$Advanced$Bad, false, bag);
- } else {
- var parse = parsers.a;
- var remainingParsers = parsers.b;
- var _n1 = parse(s0);
- if (!_n1.$) {
- var step = _n1;
- return step;
- } else {
- var step = _n1;
- var p = step.a;
- var x = step.b;
- if (p) {
- return step;
- } else {
- var $temp$s0 = s0,
- $temp$bag = A2(elm$parser$Parser$Advanced$Append, bag, x),
- $temp$parsers = remainingParsers;
- s0 = $temp$s0;
- bag = $temp$bag;
- parsers = $temp$parsers;
- continue oneOfHelp;
- }
- }
- }
- }
- });
-var elm$parser$Parser$Advanced$oneOf = function (parsers) {
- return function (s) {
- return A3(elm$parser$Parser$Advanced$oneOfHelp, s, elm$parser$Parser$Advanced$Empty, parsers);
- };
-};
-var elm$parser$Parser$oneOf = elm$parser$Parser$Advanced$oneOf;
-var elm$parser$Parser$Advanced$chompWhileHelp = F5(
- function (isGood, offset, row, col, s0) {
- chompWhileHelp:
- while (true) {
- var newOffset = A3(elm$parser$Parser$Advanced$isSubChar, isGood, offset, s0.a);
- if (_Utils_eq(newOffset, -1)) {
- return A3(
- elm$parser$Parser$Advanced$Good,
- _Utils_cmp(s0.b, offset) < 0,
- 0,
- {aH: col, c: s0.c, d: s0.d, b: offset, a7: row, a: s0.a});
- } else {
- if (_Utils_eq(newOffset, -2)) {
- var $temp$isGood = isGood,
- $temp$offset = offset + 1,
- $temp$row = row + 1,
- $temp$col = 1,
- $temp$s0 = s0;
- isGood = $temp$isGood;
- offset = $temp$offset;
- row = $temp$row;
- col = $temp$col;
- s0 = $temp$s0;
- continue chompWhileHelp;
- } else {
- var $temp$isGood = isGood,
- $temp$offset = newOffset,
- $temp$row = row,
- $temp$col = col + 1,
- $temp$s0 = s0;
- isGood = $temp$isGood;
- offset = $temp$offset;
- row = $temp$row;
- col = $temp$col;
- s0 = $temp$s0;
- continue chompWhileHelp;
- }
- }
- }
- });
-var elm$parser$Parser$Advanced$chompWhile = function (isGood) {
- return function (s) {
- return A5(elm$parser$Parser$Advanced$chompWhileHelp, isGood, s.b, s.a7, s.aH, s);
- };
-};
-var elm$parser$Parser$Advanced$spaces = elm$parser$Parser$Advanced$chompWhile(
- function (c) {
- return (c === ' ') || ((c === '\n') || (c === '\r'));
- });
-var elm$parser$Parser$spaces = elm$parser$Parser$Advanced$spaces;
-var elm$parser$Parser$Advanced$succeed = function (a) {
- return function (s) {
- return A3(elm$parser$Parser$Advanced$Good, false, a, s);
- };
-};
-var elm$parser$Parser$succeed = elm$parser$Parser$Advanced$succeed;
-var author$project$Color$hsla = A2(
- elm$parser$Parser$keeper,
- A2(
- elm$parser$Parser$keeper,
- A2(
- elm$parser$Parser$keeper,
- A2(
- elm$parser$Parser$keeper,
- A2(
- elm$parser$Parser$ignorer,
- A2(
- elm$parser$Parser$ignorer,
- elm$parser$Parser$succeed(author$project$Color$fromHSLA),
- elm$parser$Parser$oneOf(
- _List_fromArray(
- [
- elm$parser$Parser$keyword('hsla'),
- elm$parser$Parser$keyword('hsl')
- ]))),
- elm$parser$Parser$symbol('(')),
- A2(
- elm$parser$Parser$ignorer,
- A2(
- elm$parser$Parser$ignorer,
- A2(elm$parser$Parser$ignorer, author$project$Color$angle, elm$parser$Parser$spaces),
- elm$parser$Parser$symbol(',')),
- elm$parser$Parser$spaces)),
- A2(
- elm$parser$Parser$ignorer,
- A2(
- elm$parser$Parser$ignorer,
- A2(elm$parser$Parser$ignorer, author$project$Color$percentage, elm$parser$Parser$spaces),
- elm$parser$Parser$symbol(',')),
- elm$parser$Parser$spaces)),
- author$project$Color$percentage),
- A2(
- elm$parser$Parser$ignorer,
- elm$parser$Parser$oneOf(
- _List_fromArray(
- [
- A2(
- elm$parser$Parser$keeper,
- A2(
- elm$parser$Parser$ignorer,
- A2(
- elm$parser$Parser$ignorer,
- elm$parser$Parser$succeed(elm$core$Basics$identity),
- elm$parser$Parser$symbol(',')),
- elm$parser$Parser$spaces),
- elm$parser$Parser$float),
- elm$parser$Parser$succeed(1)
- ])),
- elm$parser$Parser$symbol(')')));
-var author$project$Color$hexToInt = function (_char) {
- var _n0 = elm$core$Char$toLower(_char);
- switch (_n0) {
- case '0':
- return elm$core$Maybe$Just(0);
- case '1':
- return elm$core$Maybe$Just(1);
- case '2':
- return elm$core$Maybe$Just(2);
- case '3':
- return elm$core$Maybe$Just(3);
- case '4':
- return elm$core$Maybe$Just(4);
- case '5':
- return elm$core$Maybe$Just(5);
- case '6':
- return elm$core$Maybe$Just(6);
- case '7':
- return elm$core$Maybe$Just(7);
- case '8':
- return elm$core$Maybe$Just(8);
- case '9':
- return elm$core$Maybe$Just(9);
- case 'a':
- return elm$core$Maybe$Just(10);
- case 'b':
- return elm$core$Maybe$Just(11);
- case 'c':
- return elm$core$Maybe$Just(12);
- case 'd':
- return elm$core$Maybe$Just(13);
- case 'e':
- return elm$core$Maybe$Just(14);
- case 'f':
- return elm$core$Maybe$Just(15);
- default:
- return elm$core$Maybe$Nothing;
- }
-};
-var elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy;
-var elm$core$Maybe$map2 = F3(
- function (func, ma, mb) {
- if (ma.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var a = ma.a;
- if (mb.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var b = mb.a;
- return elm$core$Maybe$Just(
- A2(func, a, b));
- }
- }
- });
-var author$project$Color$hex2ToInt = F2(
- function (c1, c2) {
- return A3(
- elm$core$Maybe$map2,
- F2(
- function (v1, v2) {
- return (v1 << 4) + v2;
- }),
- author$project$Color$hexToInt(c1),
- author$project$Color$hexToInt(c2));
- });
-var elm$parser$Parser$Problem = function (a) {
- return {$: 12, a: a};
-};
-var elm$parser$Parser$Advanced$problem = function (x) {
- return function (s) {
- return A2(
- elm$parser$Parser$Advanced$Bad,
- false,
- A2(elm$parser$Parser$Advanced$fromState, s, x));
- };
-};
-var elm$parser$Parser$problem = function (msg) {
- return elm$parser$Parser$Advanced$problem(
- elm$parser$Parser$Problem(msg));
-};
-var author$project$Color$maybeToParser = function (aMaybe) {
- if (!aMaybe.$) {
- var a = aMaybe.a;
- return elm$parser$Parser$succeed(a);
- } else {
- return elm$parser$Parser$problem('something went wrong');
- }
-};
-var elm$core$Maybe$map4 = F5(
- function (func, ma, mb, mc, md) {
- if (ma.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var a = ma.a;
- if (mb.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var b = mb.a;
- if (mc.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var c = mc.a;
- if (md.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var d = md.a;
- return elm$core$Maybe$Just(
- A4(func, a, b, c, d));
- }
- }
- }
- }
- });
-var author$project$Color$fromHex8 = F4(
- function (_n0, _n1, _n2, _n3) {
- var r1 = _n0.a;
- var r2 = _n0.b;
- var g1 = _n1.a;
- var g2 = _n1.b;
- var b1 = _n2.a;
- var b2 = _n2.b;
- var a1 = _n3.a;
- var a2 = _n3.b;
- return author$project$Color$maybeToParser(
- A5(
- elm$core$Maybe$map4,
- F4(
- function (r, g, b, a) {
- return A4(author$project$Color$Color, r, g, b, a / 255);
- }),
- A2(author$project$Color$hex2ToInt, r1, r2),
- A2(author$project$Color$hex2ToInt, g1, g2),
- A2(author$project$Color$hex2ToInt, b1, b2),
- A2(author$project$Color$hex2ToInt, a1, a2)));
- });
-var author$project$Color$fromHexString = function (hexString) {
- var _n0 = elm$core$String$toList(hexString);
- _n0$8:
- while (true) {
- if ((_n0.b && _n0.b.b) && _n0.b.b.b) {
- if (!_n0.b.b.b.b) {
- var r = _n0.a;
- var _n4 = _n0.b;
- var g = _n4.a;
- var _n5 = _n4.b;
- var b = _n5.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r, r),
- _Utils_Tuple2(g, g),
- _Utils_Tuple2(b, b),
- _Utils_Tuple2('f', 'f'));
- } else {
- if (!_n0.b.b.b.b.b) {
- if ('#' === _n0.a) {
- var _n1 = _n0.b;
- var r = _n1.a;
- var _n2 = _n1.b;
- var g = _n2.a;
- var _n3 = _n2.b;
- var b = _n3.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r, r),
- _Utils_Tuple2(g, g),
- _Utils_Tuple2(b, b),
- _Utils_Tuple2('f', 'f'));
- } else {
- var r = _n0.a;
- var _n10 = _n0.b;
- var g = _n10.a;
- var _n11 = _n10.b;
- var b = _n11.a;
- var _n12 = _n11.b;
- var a = _n12.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r, r),
- _Utils_Tuple2(g, g),
- _Utils_Tuple2(b, b),
- _Utils_Tuple2(a, a));
- }
- } else {
- if (!_n0.b.b.b.b.b.b) {
- if ('#' === _n0.a) {
- var _n6 = _n0.b;
- var r = _n6.a;
- var _n7 = _n6.b;
- var g = _n7.a;
- var _n8 = _n7.b;
- var b = _n8.a;
- var _n9 = _n8.b;
- var a = _n9.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r, r),
- _Utils_Tuple2(g, g),
- _Utils_Tuple2(b, b),
- _Utils_Tuple2(a, a));
- } else {
- break _n0$8;
- }
- } else {
- if (!_n0.b.b.b.b.b.b.b) {
- var r1 = _n0.a;
- var _n19 = _n0.b;
- var r2 = _n19.a;
- var _n20 = _n19.b;
- var g1 = _n20.a;
- var _n21 = _n20.b;
- var g2 = _n21.a;
- var _n22 = _n21.b;
- var b1 = _n22.a;
- var _n23 = _n22.b;
- var b2 = _n23.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r1, r2),
- _Utils_Tuple2(g1, g2),
- _Utils_Tuple2(b1, b2),
- _Utils_Tuple2('f', 'f'));
- } else {
- if (!_n0.b.b.b.b.b.b.b.b) {
- if ('#' === _n0.a) {
- var _n13 = _n0.b;
- var r1 = _n13.a;
- var _n14 = _n13.b;
- var r2 = _n14.a;
- var _n15 = _n14.b;
- var g1 = _n15.a;
- var _n16 = _n15.b;
- var g2 = _n16.a;
- var _n17 = _n16.b;
- var b1 = _n17.a;
- var _n18 = _n17.b;
- var b2 = _n18.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r1, r2),
- _Utils_Tuple2(g1, g2),
- _Utils_Tuple2(b1, b2),
- _Utils_Tuple2('f', 'f'));
- } else {
- break _n0$8;
- }
- } else {
- if (_n0.b.b.b.b.b.b.b.b.b) {
- if (('#' === _n0.a) && (!_n0.b.b.b.b.b.b.b.b.b.b)) {
- var _n24 = _n0.b;
- var r1 = _n24.a;
- var _n25 = _n24.b;
- var r2 = _n25.a;
- var _n26 = _n25.b;
- var g1 = _n26.a;
- var _n27 = _n26.b;
- var g2 = _n27.a;
- var _n28 = _n27.b;
- var b1 = _n28.a;
- var _n29 = _n28.b;
- var b2 = _n29.a;
- var _n30 = _n29.b;
- var a1 = _n30.a;
- var _n31 = _n30.b;
- var a2 = _n31.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r1, r2),
- _Utils_Tuple2(g1, g2),
- _Utils_Tuple2(b1, b2),
- _Utils_Tuple2(a1, a2));
- } else {
- break _n0$8;
- }
- } else {
- var r1 = _n0.a;
- var _n32 = _n0.b;
- var r2 = _n32.a;
- var _n33 = _n32.b;
- var g1 = _n33.a;
- var _n34 = _n33.b;
- var g2 = _n34.a;
- var _n35 = _n34.b;
- var b1 = _n35.a;
- var _n36 = _n35.b;
- var b2 = _n36.a;
- var _n37 = _n36.b;
- var a1 = _n37.a;
- var _n38 = _n37.b;
- var a2 = _n38.a;
- return A4(
- author$project$Color$fromHex8,
- _Utils_Tuple2(r1, r2),
- _Utils_Tuple2(g1, g2),
- _Utils_Tuple2(b1, b2),
- _Utils_Tuple2(a1, a2));
- }
- }
- }
- }
- }
- }
- } else {
- break _n0$8;
- }
- }
- return elm$parser$Parser$problem('Invalid color');
-};
-var author$project$Color$keywords = elm$parser$Parser$oneOf(
- _List_fromArray(
- [
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#000000'),
- elm$parser$Parser$keyword('black')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#c0c0c0'),
- elm$parser$Parser$keyword('silver')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#808080'),
- elm$parser$Parser$keyword('gray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffffff'),
- elm$parser$Parser$keyword('white')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#800000'),
- elm$parser$Parser$keyword('maroon')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff0000'),
- elm$parser$Parser$keyword('red')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#800080'),
- elm$parser$Parser$keyword('purple')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff00ff'),
- elm$parser$Parser$keyword('fuchsia')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#008000'),
- elm$parser$Parser$keyword('green')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00ff00'),
- elm$parser$Parser$keyword('lime')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#808000'),
- elm$parser$Parser$keyword('olive')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffff00'),
- elm$parser$Parser$keyword('yellow')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#000080'),
- elm$parser$Parser$keyword('navy')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#0000ff'),
- elm$parser$Parser$keyword('blue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#008080'),
- elm$parser$Parser$keyword('teal')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00ffff'),
- elm$parser$Parser$keyword('aqua')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffa500'),
- elm$parser$Parser$keyword('orange')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f0f8ff'),
- elm$parser$Parser$keyword('aliceblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#faebd7'),
- elm$parser$Parser$keyword('antiquewhite')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#7fffd4'),
- elm$parser$Parser$keyword('aquamarine')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f0ffff'),
- elm$parser$Parser$keyword('azure')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f5f5dc'),
- elm$parser$Parser$keyword('beige')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffe4c4'),
- elm$parser$Parser$keyword('bisque')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffebcd'),
- elm$parser$Parser$keyword('blanchedalmond')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#8a2be2'),
- elm$parser$Parser$keyword('blueviolet')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#a52a2a'),
- elm$parser$Parser$keyword('brown')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#deb887'),
- elm$parser$Parser$keyword('burlywood')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#5f9ea0'),
- elm$parser$Parser$keyword('cadetblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#7fff00'),
- elm$parser$Parser$keyword('chartreuse')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#d2691e'),
- elm$parser$Parser$keyword('chocolate')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff7f50'),
- elm$parser$Parser$keyword('coral')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#6495ed'),
- elm$parser$Parser$keyword('cornflowerblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fff8dc'),
- elm$parser$Parser$keyword('cornsilk')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#dc143c'),
- elm$parser$Parser$keyword('crimson')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00ffff'),
- elm$parser$Parser$keyword('cyan')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00008b'),
- elm$parser$Parser$keyword('darkblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#008b8b'),
- elm$parser$Parser$keyword('darkcyan')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#b8860b'),
- elm$parser$Parser$keyword('darkgoldenrod')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#a9a9a9'),
- elm$parser$Parser$keyword('darkgray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#006400'),
- elm$parser$Parser$keyword('darkgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#a9a9a9'),
- elm$parser$Parser$keyword('darkgrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#bdb76b'),
- elm$parser$Parser$keyword('darkkhaki')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#8b008b'),
- elm$parser$Parser$keyword('darkmagenta')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#556b2f'),
- elm$parser$Parser$keyword('darkolivegreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff8c00'),
- elm$parser$Parser$keyword('darkorange')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#9932cc'),
- elm$parser$Parser$keyword('darkorchid')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#8b0000'),
- elm$parser$Parser$keyword('darkred')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#e9967a'),
- elm$parser$Parser$keyword('darksalmon')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#8fbc8f'),
- elm$parser$Parser$keyword('darkseagreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#483d8b'),
- elm$parser$Parser$keyword('darkslateblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#2f4f4f'),
- elm$parser$Parser$keyword('darkslategray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#2f4f4f'),
- elm$parser$Parser$keyword('darkslategrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00ced1'),
- elm$parser$Parser$keyword('darkturquoise')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#9400d3'),
- elm$parser$Parser$keyword('darkviolet')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff1493'),
- elm$parser$Parser$keyword('deeppink')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00bfff'),
- elm$parser$Parser$keyword('deepskyblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#696969'),
- elm$parser$Parser$keyword('dimgray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#696969'),
- elm$parser$Parser$keyword('dimgrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#1e90ff'),
- elm$parser$Parser$keyword('dodgerblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#b22222'),
- elm$parser$Parser$keyword('firebrick')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fffaf0'),
- elm$parser$Parser$keyword('floralwhite')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#228b22'),
- elm$parser$Parser$keyword('forestgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#dcdcdc'),
- elm$parser$Parser$keyword('gainsboro')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f8f8ff'),
- elm$parser$Parser$keyword('ghostwhite')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffd700'),
- elm$parser$Parser$keyword('gold')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#daa520'),
- elm$parser$Parser$keyword('goldenrod')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#adff2f'),
- elm$parser$Parser$keyword('greenyellow')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#808080'),
- elm$parser$Parser$keyword('grey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f0fff0'),
- elm$parser$Parser$keyword('honeydew')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff69b4'),
- elm$parser$Parser$keyword('hotpink')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#cd5c5c'),
- elm$parser$Parser$keyword('indianred')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#4b0082'),
- elm$parser$Parser$keyword('indigo')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fffff0'),
- elm$parser$Parser$keyword('ivory')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f0e68c'),
- elm$parser$Parser$keyword('khaki')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#e6e6fa'),
- elm$parser$Parser$keyword('lavender')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fff0f5'),
- elm$parser$Parser$keyword('lavenderblush')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#7cfc00'),
- elm$parser$Parser$keyword('lawngreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fffacd'),
- elm$parser$Parser$keyword('lemonchiffon')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#add8e6'),
- elm$parser$Parser$keyword('lightblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f08080'),
- elm$parser$Parser$keyword('lightcoral')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#e0ffff'),
- elm$parser$Parser$keyword('lightcyan')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fafad2'),
- elm$parser$Parser$keyword('lightgoldenrodyellow')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#d3d3d3'),
- elm$parser$Parser$keyword('lightgray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#90ee90'),
- elm$parser$Parser$keyword('lightgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#d3d3d3'),
- elm$parser$Parser$keyword('lightgrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffb6c1'),
- elm$parser$Parser$keyword('lightpink')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffa07a'),
- elm$parser$Parser$keyword('lightsalmon')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#20b2aa'),
- elm$parser$Parser$keyword('lightseagreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#87cefa'),
- elm$parser$Parser$keyword('lightskyblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#778899'),
- elm$parser$Parser$keyword('lightslategray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#778899'),
- elm$parser$Parser$keyword('lightslategrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#b0c4de'),
- elm$parser$Parser$keyword('lightsteelblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffffe0'),
- elm$parser$Parser$keyword('lightyellow')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#32cd32'),
- elm$parser$Parser$keyword('limegreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#faf0e6'),
- elm$parser$Parser$keyword('linen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff00ff'),
- elm$parser$Parser$keyword('magenta')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#66cdaa'),
- elm$parser$Parser$keyword('mediumaquamarine')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#0000cd'),
- elm$parser$Parser$keyword('mediumblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ba55d3'),
- elm$parser$Parser$keyword('mediumorchid')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#9370db'),
- elm$parser$Parser$keyword('mediumpurple')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#3cb371'),
- elm$parser$Parser$keyword('mediumseagreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#7b68ee'),
- elm$parser$Parser$keyword('mediumslateblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00fa9a'),
- elm$parser$Parser$keyword('mediumspringgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#48d1cc'),
- elm$parser$Parser$keyword('mediumturquoise')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#c71585'),
- elm$parser$Parser$keyword('mediumvioletred')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#191970'),
- elm$parser$Parser$keyword('midnightblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f5fffa'),
- elm$parser$Parser$keyword('mintcream')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffe4e1'),
- elm$parser$Parser$keyword('mistyrose')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffe4b5'),
- elm$parser$Parser$keyword('moccasin')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffdead'),
- elm$parser$Parser$keyword('navajowhite')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fdf5e6'),
- elm$parser$Parser$keyword('oldlace')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#6b8e23'),
- elm$parser$Parser$keyword('olivedrab')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff4500'),
- elm$parser$Parser$keyword('orangered')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#da70d6'),
- elm$parser$Parser$keyword('orchid')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#eee8aa'),
- elm$parser$Parser$keyword('palegoldenrod')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#98fb98'),
- elm$parser$Parser$keyword('palegreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#afeeee'),
- elm$parser$Parser$keyword('paleturquoise')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#db7093'),
- elm$parser$Parser$keyword('palevioletred')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffefd5'),
- elm$parser$Parser$keyword('papayawhip')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffdab9'),
- elm$parser$Parser$keyword('peachpuff')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#cd853f'),
- elm$parser$Parser$keyword('peru')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ffc0cb'),
- elm$parser$Parser$keyword('pink')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#dda0dd'),
- elm$parser$Parser$keyword('plum')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#b0e0e6'),
- elm$parser$Parser$keyword('powderblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#bc8f8f'),
- elm$parser$Parser$keyword('rosybrown')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#4169e1'),
- elm$parser$Parser$keyword('royalblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#8b4513'),
- elm$parser$Parser$keyword('saddlebrown')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fa8072'),
- elm$parser$Parser$keyword('salmon')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f4a460'),
- elm$parser$Parser$keyword('sandybrown')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#2e8b57'),
- elm$parser$Parser$keyword('seagreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fff5ee'),
- elm$parser$Parser$keyword('seashell')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#a0522d'),
- elm$parser$Parser$keyword('sienna')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#87ceeb'),
- elm$parser$Parser$keyword('skyblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#6a5acd'),
- elm$parser$Parser$keyword('slateblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#708090'),
- elm$parser$Parser$keyword('slategray')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#708090'),
- elm$parser$Parser$keyword('slategrey')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#fffafa'),
- elm$parser$Parser$keyword('snow')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#00ff7f'),
- elm$parser$Parser$keyword('springgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#4682b4'),
- elm$parser$Parser$keyword('steelblue')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#d2b48c'),
- elm$parser$Parser$keyword('tan')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#d8bfd8'),
- elm$parser$Parser$keyword('thistle')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ff6347'),
- elm$parser$Parser$keyword('tomato')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#40e0d0'),
- elm$parser$Parser$keyword('turquoise')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#ee82ee'),
- elm$parser$Parser$keyword('violet')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f5deb3'),
- elm$parser$Parser$keyword('wheat')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#f5f5f5'),
- elm$parser$Parser$keyword('whitesmoke')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#9acd32'),
- elm$parser$Parser$keyword('yellowgreen')),
- A2(
- elm$parser$Parser$ignorer,
- author$project$Color$fromHexString('#663399'),
- elm$parser$Parser$keyword('rebeccapurple')),
- A2(
- elm$parser$Parser$ignorer,
- elm$parser$Parser$succeed(
- A4(author$project$Color$Color, 0, 0, 0, 0)),
- elm$parser$Parser$keyword('transparent'))
- ]));
-var elm$parser$Parser$ExpectingEnd = {$: 10};
-var elm$core$String$length = _String_length;
-var elm$parser$Parser$Advanced$end = function (x) {
- return function (s) {
- return _Utils_eq(
- elm$core$String$length(s.a),
- s.b) ? A3(elm$parser$Parser$Advanced$Good, false, 0, s) : A2(
- elm$parser$Parser$Advanced$Bad,
- false,
- A2(elm$parser$Parser$Advanced$fromState, s, x));
- };
-};
-var elm$parser$Parser$end = elm$parser$Parser$Advanced$end(elm$parser$Parser$ExpectingEnd);
-var author$project$Color$parser = A2(
- elm$parser$Parser$ignorer,
- elm$parser$Parser$oneOf(
- _List_fromArray(
- [author$project$Color$keywords, author$project$Color$hsla])),
- elm$parser$Parser$end);
-var elm$core$Result$mapError = F2(
- function (f, result) {
- if (!result.$) {
- var v = result.a;
- return elm$core$Result$Ok(v);
- } else {
- var e = result.a;
- return elm$core$Result$Err(
- f(e));
- }
- });
-var elm$parser$Parser$deadEndsToString = function (deadEnds) {
- return 'TODO deadEndsToString';
-};
-var elm$parser$Parser$DeadEnd = F3(
- function (row, col, problem) {
- return {aH: col, a$: problem, a7: row};
- });
-var elm$parser$Parser$problemToDeadEnd = function (p) {
- return A3(elm$parser$Parser$DeadEnd, p.a7, p.aH, p.a$);
-};
-var elm$parser$Parser$Advanced$bagToList = F2(
- function (bag, list) {
- bagToList:
- while (true) {
- switch (bag.$) {
- case 0:
- return list;
- case 1:
- var bag1 = bag.a;
- var x = bag.b;
- var $temp$bag = bag1,
- $temp$list = A2(elm$core$List$cons, x, list);
- bag = $temp$bag;
- list = $temp$list;
- continue bagToList;
- default:
- var bag1 = bag.a;
- var bag2 = bag.b;
- var $temp$bag = bag1,
- $temp$list = A2(elm$parser$Parser$Advanced$bagToList, bag2, list);
- bag = $temp$bag;
- list = $temp$list;
- continue bagToList;
- }
- }
- });
-var elm$parser$Parser$Advanced$run = F2(
- function (_n0, src) {
- var parse = _n0;
- var _n1 = parse(
- {aH: 1, c: _List_Nil, d: 1, b: 0, a7: 1, a: src});
- if (!_n1.$) {
- var value = _n1.b;
- return elm$core$Result$Ok(value);
- } else {
- var bag = _n1.b;
- return elm$core$Result$Err(
- A2(elm$parser$Parser$Advanced$bagToList, bag, _List_Nil));
- }
- });
-var elm$parser$Parser$run = F2(
- function (parser, source) {
- var _n0 = A2(elm$parser$Parser$Advanced$run, parser, source);
- if (!_n0.$) {
- var a = _n0.a;
- return elm$core$Result$Ok(a);
- } else {
- var problems = _n0.a;
- return elm$core$Result$Err(
- A2(elm$core$List$map, elm$parser$Parser$problemToDeadEnd, problems));
- }
- });
-var author$project$Color$parse = function (string) {
- return A2(
- elm$core$Result$mapError,
- elm$parser$Parser$deadEndsToString,
- A2(elm$parser$Parser$run, author$project$Color$parser, string));
-};
-var stil4m$elm_syntax$Elm$Syntax$Expression$Integer = function (a) {
- return {$: 7, a: a};
-};
-var author$project$Decoder$integer = A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Expression$Integer, author$project$Decoder$node);
-var author$project$Decoder$makeConstant = function (s) {
- switch (s) {
- case 'map':
- return A2(author$project$Decoder$value, 'E', 'anchorMap');
- case 'viewport':
- return A2(author$project$Decoder$value, 'E', 'anchorViewport');
- case 'auto':
- return A2(author$project$Decoder$value, 'E', 'anchorAuto');
- case 'center':
- return A2(author$project$Decoder$value, 'E', 'positionCenter');
- case 'left':
- return A2(author$project$Decoder$value, 'E', 'positionLeft');
- case 'right':
- return A2(author$project$Decoder$value, 'E', 'positionRight');
- case 'top':
- return A2(author$project$Decoder$value, 'E', 'positionTop');
- case 'bottom':
- return A2(author$project$Decoder$value, 'E', 'positionBottom');
- case 'topRight':
- return A2(author$project$Decoder$value, 'E', 'positionTopRight');
- case 'topLeft':
- return A2(author$project$Decoder$value, 'E', 'positionTopLeft');
- case 'bottomLeft':
- return A2(author$project$Decoder$value, 'E', 'positionBottomLeft');
- case 'bottomRight':
- return A2(author$project$Decoder$value, 'E', 'positionBottomRight');
- case 'none':
- return A2(author$project$Decoder$value, 'E', 'textFitNone');
- case 'width':
- return A2(author$project$Decoder$value, 'E', 'textFitWidth');
- case 'height':
- return A2(author$project$Decoder$value, 'E', 'textFitHeight');
- case 'both':
- return A2(author$project$Decoder$value, 'E', 'textFitBoth');
- case 'butt':
- return A2(author$project$Decoder$value, 'E', 'lineCapButt');
- case 'round':
- return A2(author$project$Decoder$value, 'E', 'lineCapRound');
- case 'square':
- return A2(author$project$Decoder$value, 'E', 'lineCapSquare');
- case 'bevel':
- return A2(author$project$Decoder$value, 'E', 'lineJoinBevel');
- case 'miter':
- return A2(author$project$Decoder$value, 'E', 'lineJoinMiter');
- case 'point':
- return A2(author$project$Decoder$value, 'E', 'symbolPlacementPoint');
- case 'line-center':
- return A2(author$project$Decoder$value, 'E', 'symbolPlacementLineCenter');
- case 'line':
- return A2(author$project$Decoder$value, 'E', 'symbolPlacementLine');
- case 'uppercase':
- return A2(author$project$Decoder$value, 'E', 'textTransformUppercase');
- case 'lowercase':
- return A2(author$project$Decoder$value, 'E', 'textTransformLowercase');
- case 'linear':
- return A2(author$project$Decoder$value, 'E', 'rasterResamplingLinear');
- case 'nearest':
- return A2(author$project$Decoder$value, 'E', 'rasterResamplingNearest');
- default:
- var _n1 = author$project$Color$parse(s);
- if (!_n1.$) {
- var r = _n1.a.bU;
- var g = _n1.a.bF;
- var b = _n1.a.bl;
- var a = _n1.a.bh;
- return A3(
- author$project$Decoder$call,
- 'E',
- 'rgba',
- _List_fromArray(
- [
- author$project$Decoder$integer(r),
- author$project$Decoder$integer(g),
- author$project$Decoder$integer(b),
- author$project$Decoder$float(a)
- ]));
- } else {
- var err = _n1.a;
- return A2(
- author$project$Decoder$ecall,
- 'str',
- author$project$Decoder$str(s));
- }
- }
-};
-var author$project$Decoder$todo = A2(
- elm$json$Json$Decode$map,
- function (val) {
- return author$project$Decoder$todoExpr(
- 'The expression ' + (A2(elm$json$Json$Encode$encode, 0, val) + ' is not yet supported'));
- },
- elm$json$Json$Decode$value);
-var elm$core$Basics$neq = _Utils_notEqual;
-var elm$core$String$toLower = _String_toLower;
-var elm$json$Json$Decode$int = _Json_decodeInt;
-var elm$json$Json$Decode$map3 = _Json_map3;
-var stil4m$elm_syntax$Elm$Syntax$Expression$TupledExpression = function (a) {
- return {$: 13, a: a};
-};
-var stil4m$elm_syntax$Elm$Syntax$Infix$Right = 1;
-var author$project$Decoder$decodeExpression = function (funName) {
- switch (funName) {
- case 'literal':
- return A2(
- elm$json$Json$Decode$index,
- 1,
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- function (strs) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'strings',
- _List_fromArray(
- [
- author$project$Decoder$list(
- A2(elm$core$List$map, author$project$Decoder$str, strs))
- ]));
- },
- elm$json$Json$Decode$list(elm$json$Json$Decode$string)),
- A2(
- elm$json$Json$Decode$map,
- function (floats) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'floats',
- _List_fromArray(
- [
- author$project$Decoder$list(
- A2(elm$core$List$map, author$project$Decoder$float, floats))
- ]));
- },
- elm$json$Json$Decode$list(elm$json$Json$Decode$float))
- ])));
- case 'match':
- return elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$andThen,
- author$project$Decoder$decodeMatch(true),
- A2(elm$json$Json$Decode$index, 2, elm$json$Json$Decode$string)),
- A2(
- elm$json$Json$Decode$andThen,
- author$project$Decoder$decodeMatch(false),
- A2(elm$json$Json$Decode$index, 2, elm$json$Json$Decode$float))
- ]));
- case 'exponential':
- return A2(
- elm$json$Json$Decode$map,
- function (base) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'Exponential',
- _List_fromArray(
- [
- author$project$Decoder$float(base)
- ]));
- },
- A2(elm$json$Json$Decode$index, 1, elm$json$Json$Decode$float));
- case 'interpolate':
- return A4(
- elm$json$Json$Decode$map3,
- F3(
- function (interpolation, options, input) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'interpolate',
- A2(
- elm$core$List$cons,
- input,
- A2(elm$core$List$cons, interpolation, options)));
- }),
- A2(
- elm$json$Json$Decode$index,
- 1,
- author$project$Decoder$cyclic$decodeValue()),
- A2(
- elm$json$Json$Decode$andThen,
- A2(
- author$project$Decoder$organizeArgs,
- A2(elm$json$Json$Decode$map, author$project$Decoder$float, elm$json$Json$Decode$float),
- _List_Nil),
- A2(
- elm$json$Json$Decode$map,
- elm$core$List$drop(2),
- author$project$Decoder$decodeTail(elm$json$Json$Decode$value))),
- A2(
- elm$json$Json$Decode$index,
- 2,
- author$project$Decoder$cyclic$decodeValue()));
- case 'step':
- return A4(
- elm$json$Json$Decode$map3,
- F3(
- function (inp, def, stps) {
- return A3(
- author$project$Decoder$pipelineCall,
- 'E',
- 'step',
- A2(
- elm$core$List$cons,
- inp,
- A2(elm$core$List$cons, def, stps)));
- }),
- A2(
- elm$json$Json$Decode$index,
- 1,
- author$project$Decoder$cyclic$decodeValue()),
- A2(
- elm$json$Json$Decode$index,
- 2,
- author$project$Decoder$cyclic$decodeValue()),
- A2(
- elm$json$Json$Decode$andThen,
- A2(
- author$project$Decoder$organizeArgs,
- A2(elm$json$Json$Decode$map, author$project$Decoder$float, elm$json$Json$Decode$float),
- _List_Nil),
- A2(
- elm$json$Json$Decode$map,
- elm$core$List$drop(2),
- author$project$Decoder$decodeTail(elm$json$Json$Decode$value))));
- default:
- var fallback = A2(
- elm$json$Json$Decode$map,
- function (_arguments) {
- switch (funName) {
- case '==':
- return A3(author$project$Decoder$pipelineCall, 'E', 'isEqual', _arguments);
- case '!=':
- return A3(author$project$Decoder$pipelineCall, 'E', 'notEqual', _arguments);
- case '!has':
- return author$project$Decoder$todoExpr('!has is not supported');
- case '!in':
- return author$project$Decoder$todoExpr('!in is not supported');
- case 'in':
- return author$project$Decoder$todoExpr('in is not supported');
- case '>=':
- return A3(author$project$Decoder$pipelineCall, 'E', 'greaterThanOrEqual', _arguments);
- case '<=':
- return A3(author$project$Decoder$pipelineCall, 'E', 'lessThanOrEqual', _arguments);
- case 'concat':
- return A3(author$project$Decoder$pipelineCall, 'E', 'append', _arguments);
- case 'linear':
- return A3(author$project$Decoder$call, 'E', 'Linear', _arguments);
- case 'rgb':
- return A3(author$project$Decoder$call, 'E', 'makeRGBColor', _arguments);
- case 'rgba':
- return A3(author$project$Decoder$call, 'E', 'makeRGBAColor', _arguments);
- case 'to-rgba':
- return A3(author$project$Decoder$call, 'E', 'rgbaChannels', _arguments);
- case '-':
- return A3(author$project$Decoder$pipelineCall, 'E', 'minus', _arguments);
- case '*':
- return A3(author$project$Decoder$pipelineCall, 'E', 'multiply', _arguments);
- case '+':
- return A3(author$project$Decoder$pipelineCall, 'E', 'plus', _arguments);
- case '/':
- return A3(author$project$Decoder$pipelineCall, 'E', 'divideBy', _arguments);
- case '%':
- return A3(author$project$Decoder$pipelineCall, 'E', 'modBy', _arguments);
- case '^':
- return A3(author$project$Decoder$pipelineCall, 'E', 'raiseBy', _arguments);
- case 'get':
- return (elm$core$List$length(_arguments) === 1) ? A3(author$project$Decoder$call, 'E', 'getProperty', _arguments) : A3(author$project$Decoder$call, 'E', 'get', _arguments);
- default:
- return A3(
- author$project$Decoder$call,
- 'E',
- the_sett$elm_string_case$String$Case$toCamelCaseLower(funName),
- _arguments);
- }
- },
- author$project$Decoder$decodeTail(
- author$project$Decoder$cyclic$decodeValue()));
- return (!_Utils_eq(
- elm$core$String$toLower(funName),
- funName)) ? elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- function (strs) {
- return A3(
- author$project$Decoder$call,
- 'E',
- 'strings',
- _List_fromArray(
- [
- author$project$Decoder$list(
- A2(elm$core$List$map, author$project$Decoder$str, strs))
- ]));
- },
- elm$json$Json$Decode$list(elm$json$Json$Decode$string)),
- fallback
- ])) : fallback;
- }
-};
-var author$project$Decoder$decodeMatch = F2(
- function (isString, _n2) {
- return A2(
- elm$json$Json$Decode$andThen,
- function (args) {
- if (!args.b) {
- return author$project$Decoder$todo;
- } else {
- var head = args.a;
- var tail = args.b;
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (cond, rest) {
- return author$project$Decoder$parens(
- author$project$Decoder$node(
- A4(
- stil4m$elm_syntax$Elm$Syntax$Expression$OperatorApplication,
- '|>',
- 1,
- cond,
- A3(
- author$project$Decoder$call,
- 'E',
- isString ? 'matchesStr' : 'matchesFloat',
- rest))));
- }),
- A2(
- author$project$Decoder$subdecode,
- author$project$Decoder$cyclic$decodeValue(),
- head),
- A3(
- author$project$Decoder$organizeArgs,
- isString ? A2(elm$json$Json$Decode$map, author$project$Decoder$str, elm$json$Json$Decode$string) : A2(elm$json$Json$Decode$map, author$project$Decoder$float, elm$json$Json$Decode$float),
- _List_Nil,
- tail));
- }
- },
- author$project$Decoder$decodeTail(elm$json$Json$Decode$value));
- });
-var author$project$Decoder$organizeArgs = F3(
- function (inpDec, accu, args) {
- organizeArgs:
- while (true) {
- if (!args.b) {
- return author$project$Decoder$combine(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- author$project$Decoder$list,
- author$project$Decoder$combine(
- elm$core$List$reverse(accu)))
- ]));
- } else {
- if (!args.b.b) {
- var _default = args.a;
- return author$project$Decoder$combine(
- _List_fromArray(
- [
- A2(
- elm$json$Json$Decode$map,
- author$project$Decoder$list,
- author$project$Decoder$combine(
- elm$core$List$reverse(accu))),
- A2(
- author$project$Decoder$subdecode,
- author$project$Decoder$cyclic$decodeValue(),
- _default)
- ]));
- } else {
- var a = args.a;
- var _n1 = args.b;
- var b = _n1.a;
- var rest = _n1.b;
- var newAccu = A2(
- elm$core$List$cons,
- A3(
- elm$json$Json$Decode$map2,
- F2(
- function (inp, out) {
- return author$project$Decoder$parens(
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$TupledExpression(
- _List_fromArray(
- [inp, out]))));
- }),
- A2(author$project$Decoder$subdecode, inpDec, a),
- A2(
- author$project$Decoder$subdecode,
- author$project$Decoder$cyclic$decodeValue(),
- b)),
- accu);
- var $temp$inpDec = inpDec,
- $temp$accu = newAccu,
- $temp$args = rest;
- inpDec = $temp$inpDec;
- accu = $temp$accu;
- args = $temp$args;
- continue organizeArgs;
- }
- }
- }
- });
-function author$project$Decoder$cyclic$decodeValue() {
- return A2(
- elm$json$Json$Decode$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Expression$ParenthesizedExpression, author$project$Decoder$node),
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(elm$json$Json$Decode$map, author$project$Decoder$makeConstant, elm$json$Json$Decode$string),
- author$project$Decoder$decodeBool,
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- stil4m$elm_syntax$Elm$Syntax$Expression$Floatable,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$node,
- author$project$Decoder$ecall('float'))),
- elm$json$Json$Decode$float),
- A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- stil4m$elm_syntax$Elm$Syntax$Expression$Integer,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$node,
- author$project$Decoder$ecall('int'))),
- elm$json$Json$Decode$int),
- A2(
- elm$json$Json$Decode$andThen,
- author$project$Decoder$decodeExpression,
- A2(elm$json$Json$Decode$index, 0, elm$json$Json$Decode$string)),
- author$project$Decoder$todo
- ])));
-}
-var author$project$Decoder$decodeValue = author$project$Decoder$cyclic$decodeValue();
-author$project$Decoder$cyclic$decodeValue = function () {
- return author$project$Decoder$decodeValue;
-};
-var elm$core$List$maybeCons = F3(
- function (f, mx, xs) {
- var _n0 = f(mx);
- if (!_n0.$) {
- var x = _n0.a;
- return A2(elm$core$List$cons, x, xs);
- } else {
- return xs;
- }
- });
-var elm$core$List$filterMap = F2(
- function (f, xs) {
- return A3(
- elm$core$List$foldr,
- elm$core$List$maybeCons(f),
- _List_Nil,
- xs);
- });
-var elm$json$Json$Decode$field = _Json_decodeField;
-var elm$json$Json$Decode$keyValuePairs = _Json_decodeKeyValuePairs;
-var author$project$Decoder$decodeAttrs = A2(
- elm$json$Json$Decode$map,
- elm$core$List$indexedMap(author$project$Decoder$addBogusRange),
- A2(
- elm$json$Json$Decode$andThen,
- A2(
- elm$core$Basics$composeR,
- elm$core$List$filterMap(
- function (_n0) {
- var attrName = _n0.a;
- var attrValue = _n0.b;
- switch (attrName) {
- case 'id':
- return elm$core$Maybe$Nothing;
- case 'type':
- return elm$core$Maybe$Nothing;
- case 'source':
- return elm$core$Maybe$Nothing;
- case 'paint':
- return elm$core$Maybe$Nothing;
- case 'layout':
- return elm$core$Maybe$Nothing;
- case 'source-layer':
- return A3(
- author$project$Decoder$decodeAttr,
- 'sourceLayer',
- A2(elm$json$Json$Decode$map, author$project$Decoder$str, elm$json$Json$Decode$string),
- attrValue);
- case 'minzoom':
- return A3(
- author$project$Decoder$decodeAttr,
- 'minzoom',
- A2(elm$json$Json$Decode$map, author$project$Decoder$float, elm$json$Json$Decode$float),
- attrValue);
- case 'maxzoom':
- return A3(
- author$project$Decoder$decodeAttr,
- 'maxzoom',
- A2(elm$json$Json$Decode$map, author$project$Decoder$float, elm$json$Json$Decode$float),
- attrValue);
- case 'filter':
- return A3(
- author$project$Decoder$decodeAttr,
- 'filter',
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [author$project$Decoder$decodeLegacyFilter, author$project$Decoder$decodeValue])),
- attrValue);
- default:
- var other = attrName;
- return A3(
- author$project$Decoder$decodeAttr,
- the_sett$elm_string_case$String$Case$toCamelCaseLower(attrName),
- author$project$Decoder$decodeValue,
- attrValue);
- }
- }),
- author$project$Decoder$combine),
- A4(
- elm$json$Json$Decode$map3,
- F3(
- function (top, paint, layout) {
- return _Utils_ap(
- top,
- _Utils_ap(paint, layout));
- }),
- elm$json$Json$Decode$keyValuePairs(elm$json$Json$Decode$value),
- A2(
- elm$json$Json$Decode$field,
- 'paint',
- elm$json$Json$Decode$keyValuePairs(elm$json$Json$Decode$value)),
- A2(
- elm$json$Json$Decode$field,
- 'layout',
- elm$json$Json$Decode$keyValuePairs(elm$json$Json$Decode$value)))));
-var author$project$Decoder$layerDecodeHelp = function (t) {
- return A4(
- elm$json$Json$Decode$map3,
- F3(
- function (id, source, attrs) {
- return A3(
- author$project$Decoder$call,
- 'Layer',
- t,
- _List_fromArray(
- [
- author$project$Decoder$str(id),
- author$project$Decoder$str(source),
- author$project$Decoder$list(attrs)
- ]));
- }),
- A2(elm$json$Json$Decode$field, 'id', elm$json$Json$Decode$string),
- A2(elm$json$Json$Decode$field, 'source', elm$json$Json$Decode$string),
- author$project$Decoder$decodeAttrs);
-};
-var author$project$Decoder$decodeLayer = A2(
- elm$json$Json$Decode$andThen,
- function (t) {
- switch (t) {
- case 'background':
- return A3(
- elm$json$Json$Decode$map2,
- F2(
- function (id, attrs) {
- return A3(
- author$project$Decoder$call,
- 'Layer',
- 'background',
- _List_fromArray(
- [
- author$project$Decoder$str(id),
- author$project$Decoder$list(attrs)
- ]));
- }),
- A2(elm$json$Json$Decode$field, 'id', elm$json$Json$Decode$string),
- author$project$Decoder$decodeAttrs);
- case 'fill':
- return author$project$Decoder$layerDecodeHelp('fill');
- case 'symbol':
- return author$project$Decoder$layerDecodeHelp('symbol');
- case 'line':
- return author$project$Decoder$layerDecodeHelp('line');
- case 'raster':
- return author$project$Decoder$layerDecodeHelp('raster');
- case 'circle':
- return author$project$Decoder$layerDecodeHelp('circle');
- case 'fill-extrusion':
- return author$project$Decoder$layerDecodeHelp('fillExtrusion');
- case 'heatmap':
- return author$project$Decoder$layerDecodeHelp('heatmap');
- case 'hillshade':
- return author$project$Decoder$layerDecodeHelp('hillshade');
- default:
- var other = t;
- return elm$json$Json$Decode$fail('Layer type ' + (t + ' not supported'));
- }
- },
- A2(elm$json$Json$Decode$field, 'type', elm$json$Json$Decode$string));
-var author$project$Decoder$decodeLayers = A2(
- elm$json$Json$Decode$map,
- function (layers) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$ListExpr(
- A2(elm$core$List$indexedMap, author$project$Decoder$addBogusRange, layers)));
- },
- elm$json$Json$Decode$list(author$project$Decoder$decodeLayer));
-var author$project$Decoder$valueDecoder = F2(
- function (ns, name) {
- return elm$json$Json$Decode$succeed(
- author$project$Decoder$node(
- A2(
- stil4m$elm_syntax$Elm$Syntax$Expression$FunctionOrValue,
- _List_fromArray(
- [ns]),
- name)));
- });
-var author$project$Decoder$decodeLight = A2(author$project$Decoder$valueDecoder, 'Style', 'defaultLight');
-var author$project$Decoder$decodeMisc = elm$json$Json$Decode$succeed(
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$ListExpr(_List_Nil)));
-var author$project$Decoder$decodeSource = A2(
- elm$json$Json$Decode$andThen,
- function (t) {
- if (t === 'vector') {
- return A2(
- elm$json$Json$Decode$map,
- function (url) {
- return function (id) {
- return A3(
- author$project$Decoder$call,
- 'Source',
- 'vectorFromUrl',
- _List_fromArray(
- [
- author$project$Decoder$str(id),
- author$project$Decoder$str(url)
- ]));
- };
- },
- A2(elm$json$Json$Decode$field, 'url', elm$json$Json$Decode$string));
- } else {
- return elm$json$Json$Decode$succeed(
- function (a) {
- return author$project$Decoder$todoExpr('type ' + (t + 'not yet supported'));
- });
- }
- },
- A2(elm$json$Json$Decode$field, 'type', elm$json$Json$Decode$string));
-var author$project$Decoder$decodeSources = A2(
- elm$json$Json$Decode$map,
- function (sources) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$ListExpr(sources));
- },
- A2(
- elm$json$Json$Decode$map,
- elm$core$List$map(
- function (_n0) {
- var key = _n0.a;
- var fn = _n0.b;
- return fn(key);
- }),
- elm$json$Json$Decode$keyValuePairs(author$project$Decoder$decodeSource)));
-var author$project$Decoder$decodeTransition = A3(
- elm$json$Json$Decode$map2,
- F2(
- function (duration, delay) {
- return author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$RecordExpr(
- _List_fromArray(
- [
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('duration'),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Integer(duration)))),
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('delay'),
- author$project$Decoder$node(
- stil4m$elm_syntax$Elm$Syntax$Expression$Integer(delay))))
- ])));
- }),
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(elm$json$Json$Decode$field, 'duration', elm$json$Json$Decode$int),
- elm$json$Json$Decode$succeed(300)
- ])),
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(elm$json$Json$Decode$field, 'delay', elm$json$Json$Decode$int),
- elm$json$Json$Decode$succeed(0)
- ])));
-var elm$json$Json$Decode$map5 = _Json_map5;
-var author$project$Decoder$style = A6(
- elm$json$Json$Decode$map5,
- F5(
- function (transition, light, layers, sources, misc) {
- return _List_fromArray(
- [
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('transition'),
- transition)),
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('light'),
- light)),
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('layers'),
- layers)),
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('sources'),
- sources)),
- author$project$Decoder$node(
- _Utils_Tuple2(
- author$project$Decoder$node('misc'),
- misc))
- ]);
- }),
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(elm$json$Json$Decode$field, 'transition', author$project$Decoder$decodeTransition),
- A2(author$project$Decoder$valueDecoder, 'Style', 'defaultTransition')
- ])),
- elm$json$Json$Decode$oneOf(
- _List_fromArray(
- [
- A2(elm$json$Json$Decode$field, 'light', author$project$Decoder$decodeLight),
- A2(author$project$Decoder$valueDecoder, 'Style', 'defaultLight')
- ])),
- A2(elm$json$Json$Decode$field, 'layers', author$project$Decoder$decodeLayers),
- A2(elm$json$Json$Decode$field, 'sources', author$project$Decoder$decodeSources),
- author$project$Decoder$decodeMisc);
-var elm$core$List$append = F2(
- function (xs, ys) {
- if (!ys.b) {
- return xs;
- } else {
- return A3(elm$core$List$foldr, elm$core$List$cons, ys, xs);
- }
- });
-var elm$core$List$concat = function (lists) {
- return A3(elm$core$List$foldr, elm$core$List$append, _List_Nil, lists);
-};
-var elm$core$List$concatMap = F2(
- function (f, list) {
- return elm$core$List$concat(
- A2(elm$core$List$map, f, list));
- });
-var elm$core$Bitwise$and = _Bitwise_and;
-var elm$core$Bitwise$shiftRightBy = _Bitwise_shiftRightBy;
-var elm$core$String$repeatHelp = F3(
- function (n, chunk, result) {
- return (n <= 0) ? result : A3(
- elm$core$String$repeatHelp,
- n >> 1,
- _Utils_ap(chunk, chunk),
- (!(n & 1)) ? result : _Utils_ap(result, chunk));
- });
-var elm$core$String$repeat = F2(
- function (n, chunk) {
- return A3(elm$core$String$repeatHelp, n, chunk, '');
- });
-var stil4m$structured_writer$StructuredWriter$asIndent = function (amount) {
- return A2(elm$core$String$repeat, amount, ' ');
-};
-var stil4m$structured_writer$StructuredWriter$writeIndented = F2(
- function (indent_, w) {
- switch (w.$) {
- case 0:
- var _n1 = w.a;
- var pre = _n1.a;
- var sep = _n1.b;
- var post = _n1.c;
- var differentLines = w.b;
- var items = w.c;
- var seperator = differentLines ? ('\n' + (stil4m$structured_writer$StructuredWriter$asIndent(indent_) + sep)) : sep;
- return elm$core$String$concat(
- _List_fromArray(
- [
- pre,
- A2(
- elm$core$String$join,
- seperator,
- A2(
- elm$core$List$map,
- A2(
- elm$core$Basics$composeR,
- elm$core$Basics$identity,
- stil4m$structured_writer$StructuredWriter$writeIndented(indent_)),
- items)),
- post
- ]));
- case 1:
- var items = w.a;
- return A2(
- elm$core$String$join,
- '\n' + stil4m$structured_writer$StructuredWriter$asIndent(indent_),
- A2(
- elm$core$List$concatMap,
- A2(
- elm$core$Basics$composeR,
- stil4m$structured_writer$StructuredWriter$writeIndented(0),
- elm$core$String$split('\n')),
- items));
- case 2:
- var s = w.a;
- return s;
- case 4:
- var n = w.a;
- var next = w.b;
- return _Utils_ap(
- stil4m$structured_writer$StructuredWriter$asIndent(n + indent_),
- A2(stil4m$structured_writer$StructuredWriter$writeIndented, n + indent_, next));
- case 5:
- var items = w.a;
- return A2(
- elm$core$String$join,
- ' ',
- A2(
- elm$core$List$map,
- stil4m$structured_writer$StructuredWriter$writeIndented(indent_),
- items));
- case 6:
- var items = w.a;
- return elm$core$String$concat(
- A2(
- elm$core$List$map,
- stil4m$structured_writer$StructuredWriter$writeIndented(indent_),
- items));
- default:
- var x = w.a;
- var y = w.b;
- return _Utils_ap(
- A2(stil4m$structured_writer$StructuredWriter$writeIndented, indent_, x),
- A2(stil4m$structured_writer$StructuredWriter$writeIndented, indent_, y));
- }
- });
-var stil4m$structured_writer$StructuredWriter$write = stil4m$structured_writer$StructuredWriter$writeIndented(0);
-var author$project$Writer$write = stil4m$structured_writer$StructuredWriter$write;
-var elm$core$Set$Set_elm_builtin = elm$core$Basics$identity;
-var elm$core$Set$empty = elm$core$Dict$empty;
-var elm$core$Set$insert = F2(
- function (key, _n0) {
- var dict = _n0;
- return A3(elm$core$Dict$insert, key, 0, dict);
- });
-var elm$core$Dict$member = F2(
- function (key, dict) {
- var _n0 = A2(elm$core$Dict$get, key, dict);
- if (!_n0.$) {
- return true;
- } else {
- return false;
- }
- });
-var elm$core$Set$member = F2(
- function (key, _n0) {
- var dict = _n0;
- return A2(elm$core$Dict$member, key, dict);
- });
-var elm_community$list_extra$List$Extra$uniqueHelp = F4(
- function (f, existing, remaining, accumulator) {
- uniqueHelp:
- while (true) {
- if (!remaining.b) {
- return elm$core$List$reverse(accumulator);
- } else {
- var first = remaining.a;
- var rest = remaining.b;
- var computedFirst = f(first);
- if (A2(elm$core$Set$member, computedFirst, existing)) {
- var $temp$f = f,
- $temp$existing = existing,
- $temp$remaining = rest,
- $temp$accumulator = accumulator;
- f = $temp$f;
- existing = $temp$existing;
- remaining = $temp$remaining;
- accumulator = $temp$accumulator;
- continue uniqueHelp;
- } else {
- var $temp$f = f,
- $temp$existing = A2(elm$core$Set$insert, computedFirst, existing),
- $temp$remaining = rest,
- $temp$accumulator = A2(elm$core$List$cons, first, accumulator);
- f = $temp$f;
- existing = $temp$existing;
- remaining = $temp$remaining;
- accumulator = $temp$accumulator;
- continue uniqueHelp;
- }
- }
- }
- });
-var elm_community$list_extra$List$Extra$unique = function (list) {
- return A4(elm_community$list_extra$List$Extra$uniqueHelp, elm$core$Basics$identity, elm$core$Set$empty, list, _List_Nil);
-};
-var author$project$Writer$startOnDifferentLines = function (xs) {
- return elm$core$List$length(
- elm_community$list_extra$List$Extra$unique(
- A2(
- elm$core$List$map,
- A2(
- elm$core$Basics$composeR,
- function ($) {
- return $.bY;
- },
- function ($) {
- return $.a7;
- }),
- xs))) > 1;
-};
-var stil4m$elm_syntax$Elm$Syntax$Node$value = function (_n0) {
- var v = _n0.b;
- return v;
-};
-var stil4m$structured_writer$StructuredWriter$Str = function (a) {
- return {$: 2, a: a};
-};
-var stil4m$structured_writer$StructuredWriter$string = stil4m$structured_writer$StructuredWriter$Str;
-var author$project$Writer$writeDocumentation = A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, stil4m$structured_writer$StructuredWriter$string);
-var author$project$Writer$writeModuleName = function (moduleName) {
- return stil4m$structured_writer$StructuredWriter$string(
- A2(elm$core$String$join, '.', moduleName));
-};
-var stil4m$structured_writer$StructuredWriter$Joined = function (a) {
- return {$: 6, a: a};
-};
-var stil4m$structured_writer$StructuredWriter$join = stil4m$structured_writer$StructuredWriter$Joined;
-var author$project$Writer$writeQualifiedNameRef = function (_n0) {
- var moduleName = _n0.O;
- var name = _n0.ae;
- if (!moduleName.b) {
- return stil4m$structured_writer$StructuredWriter$string(name);
- } else {
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- author$project$Writer$writeModuleName(moduleName),
- stil4m$structured_writer$StructuredWriter$string('.'),
- stil4m$structured_writer$StructuredWriter$string(name)
- ]));
- }
-};
-var elm$core$String$fromFloat = _String_fromNumber;
-var stil4m$structured_writer$StructuredWriter$Sep = F3(
- function (a, b, c) {
- return {$: 0, a: a, b: b, c: c};
- });
-var stil4m$structured_writer$StructuredWriter$bracesComma = stil4m$structured_writer$StructuredWriter$Sep(
- _Utils_Tuple3('{', ', ', '}'));
-var stil4m$structured_writer$StructuredWriter$bracketsComma = stil4m$structured_writer$StructuredWriter$Sep(
- _Utils_Tuple3('[', ', ', ']'));
-var stil4m$structured_writer$StructuredWriter$parensComma = stil4m$structured_writer$StructuredWriter$Sep(
- _Utils_Tuple3('(', ', ', ')'));
-var stil4m$structured_writer$StructuredWriter$Spaced = function (a) {
- return {$: 5, a: a};
-};
-var stil4m$structured_writer$StructuredWriter$spaced = stil4m$structured_writer$StructuredWriter$Spaced;
-var author$project$Writer$writePattern = function (_n0) {
- var p = _n0.b;
- switch (p.$) {
- case 0:
- return stil4m$structured_writer$StructuredWriter$string('_');
- case 1:
- return stil4m$structured_writer$StructuredWriter$string('()');
- case 2:
- var c = p.a;
- return stil4m$structured_writer$StructuredWriter$string(
- '\'' + (elm$core$String$fromList(
- _List_fromArray(
- [c])) + '\''));
- case 3:
- var s = p.a;
- return stil4m$structured_writer$StructuredWriter$string(s);
- case 5:
- var h = p.a;
- return stil4m$structured_writer$StructuredWriter$string('TODO');
- case 4:
- var i = p.a;
- return stil4m$structured_writer$StructuredWriter$string(
- elm$core$String$fromInt(i));
- case 6:
- var f = p.a;
- return stil4m$structured_writer$StructuredWriter$string(
- elm$core$String$fromFloat(f));
- case 7:
- var inner = p.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$parensComma,
- false,
- A2(elm$core$List$map, author$project$Writer$writePattern, inner));
- case 8:
- var inner = p.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$bracesComma,
- false,
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, stil4m$structured_writer$StructuredWriter$string),
- inner));
- case 9:
- var left = p.a;
- var right = p.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writePattern(left),
- stil4m$structured_writer$StructuredWriter$string('::'),
- author$project$Writer$writePattern(right)
- ]));
- case 10:
- var inner = p.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$bracketsComma,
- false,
- A2(elm$core$List$map, author$project$Writer$writePattern, inner));
- case 11:
- var _var = p.a;
- return stil4m$structured_writer$StructuredWriter$string(_var);
- case 12:
- var qnr = p.a;
- var others = p.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writeQualifiedNameRef(qnr),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(elm$core$List$map, author$project$Writer$writePattern, others))
- ]));
- case 13:
- var innerPattern = p.a;
- var asName = p.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writePattern(innerPattern),
- stil4m$structured_writer$StructuredWriter$string('as'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(asName))
- ]));
- default:
- var innerPattern = p.a;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('('),
- author$project$Writer$writePattern(innerPattern),
- stil4m$structured_writer$StructuredWriter$string(')')
- ]));
- }
-};
-var elm$core$String$contains = _String_contains;
-var author$project$Writer$parensIfContainsSpaces = function (w) {
- return A2(
- elm$core$String$contains,
- ' ',
- stil4m$structured_writer$StructuredWriter$write(w)) ? stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('('),
- w,
- stil4m$structured_writer$StructuredWriter$string(')')
- ])) : w;
-};
-var elm$core$Tuple$second = function (_n0) {
- var y = _n0.b;
- return y;
-};
-var stil4m$structured_writer$StructuredWriter$sepByComma = stil4m$structured_writer$StructuredWriter$Sep(
- _Utils_Tuple3('', ', ', ''));
-var author$project$Writer$writeRecordField = function (_n4) {
- var _n5 = _n4.b;
- var name = _n5.a;
- var ref = _n5.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$string(':'),
- author$project$Writer$writeTypeAnnotation(ref)
- ]));
-};
-var author$project$Writer$writeTypeAnnotation = function (_n0) {
- var typeAnnotation = _n0.b;
- switch (typeAnnotation.$) {
- case 0:
- var s = typeAnnotation.a;
- return stil4m$structured_writer$StructuredWriter$string(s);
- case 1:
- var moduleNameAndName = typeAnnotation.a;
- var args = typeAnnotation.b;
- var moduleName = stil4m$elm_syntax$Elm$Syntax$Node$value(moduleNameAndName).a;
- var k = stil4m$elm_syntax$Elm$Syntax$Node$value(moduleNameAndName).b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- A2(
- elm$core$List$cons,
- stil4m$structured_writer$StructuredWriter$string(
- A2(
- elm$core$String$join,
- '.',
- _Utils_ap(
- moduleName,
- _List_fromArray(
- [k])))),
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, author$project$Writer$writeTypeAnnotation, author$project$Writer$parensIfContainsSpaces),
- args)));
- case 2:
- return stil4m$structured_writer$StructuredWriter$string('()');
- case 3:
- var xs = typeAnnotation.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$parensComma,
- false,
- A2(elm$core$List$map, author$project$Writer$writeTypeAnnotation, xs));
- case 4:
- var xs = typeAnnotation.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$bracesComma,
- false,
- A2(elm$core$List$map, author$project$Writer$writeRecordField, xs));
- case 5:
- var name = typeAnnotation.a;
- var fields = typeAnnotation.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('{'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$string('|'),
- A2(
- stil4m$structured_writer$StructuredWriter$sepByComma,
- false,
- A2(
- elm$core$List$map,
- author$project$Writer$writeRecordField,
- stil4m$elm_syntax$Elm$Syntax$Node$value(fields))),
- stil4m$structured_writer$StructuredWriter$string('}')
- ]));
- default:
- var left = typeAnnotation.a;
- var right = typeAnnotation.b;
- var addParensForSubTypeAnnotation = function (type_) {
- if (type_.b.$ === 6) {
- var _n3 = type_.b;
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('('),
- author$project$Writer$writeTypeAnnotation(type_),
- stil4m$structured_writer$StructuredWriter$string(')')
- ]));
- } else {
- return author$project$Writer$writeTypeAnnotation(type_);
- }
- };
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- addParensForSubTypeAnnotation(left),
- stil4m$structured_writer$StructuredWriter$string('->'),
- addParensForSubTypeAnnotation(right)
- ]));
- }
-};
-var author$project$Writer$writeSignature = function (signature) {
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(signature.ae)),
- stil4m$structured_writer$StructuredWriter$string(':'),
- author$project$Writer$writeTypeAnnotation(signature.b0)
- ]));
-};
-var elm$core$Maybe$map = F2(
- function (f, maybe) {
- if (!maybe.$) {
- var value = maybe.a;
- return elm$core$Maybe$Just(
- f(value));
- } else {
- return elm$core$Maybe$Nothing;
- }
- });
-var stil4m$elm_syntax$Elm$Syntax$Node$range = function (_n0) {
- var r = _n0.a;
- return r;
-};
-var stil4m$structured_writer$StructuredWriter$Append = F2(
- function (a, b) {
- return {$: 3, a: a, b: b};
- });
-var stil4m$structured_writer$StructuredWriter$append = stil4m$structured_writer$StructuredWriter$Append;
-var stil4m$structured_writer$StructuredWriter$Breaked = function (a) {
- return {$: 1, a: a};
-};
-var stil4m$structured_writer$StructuredWriter$breaked = stil4m$structured_writer$StructuredWriter$Breaked;
-var stil4m$structured_writer$StructuredWriter$epsilon = stil4m$structured_writer$StructuredWriter$Str('');
-var stil4m$structured_writer$StructuredWriter$Indent = F2(
- function (a, b) {
- return {$: 4, a: a, b: b};
- });
-var stil4m$structured_writer$StructuredWriter$indent = stil4m$structured_writer$StructuredWriter$Indent;
-var elm$core$Maybe$withDefault = F2(
- function (_default, maybe) {
- if (!maybe.$) {
- var value = maybe.a;
- return value;
- } else {
- return _default;
- }
- });
-var stil4m$structured_writer$StructuredWriter$maybe = elm$core$Maybe$withDefault(stil4m$structured_writer$StructuredWriter$epsilon);
-var stil4m$structured_writer$StructuredWriter$sepBySpace = stil4m$structured_writer$StructuredWriter$Sep(
- _Utils_Tuple3('', ' ', ''));
-var author$project$Writer$writeDestructuring = F2(
- function (pattern, expression) {
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writePattern(pattern),
- stil4m$structured_writer$StructuredWriter$string('=')
- ])),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 4,
- author$project$Writer$writeExpression(expression))
- ]));
- });
-var author$project$Writer$writeExpression = function (_n3) {
- writeExpression:
- while (true) {
- var range = _n3.a;
- var inner = _n3.b;
- var writeRecordSetter = function (_n11) {
- var name = _n11.a;
- var expr = _n11.b;
- return _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(expr),
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$string('='),
- author$project$Writer$writeExpression(expr)
- ])));
- };
- var sepHelper = F2(
- function (f, l) {
- var diffLines = author$project$Writer$startOnDifferentLines(
- A2(elm$core$List$map, elm$core$Tuple$first, l));
- return A2(
- f,
- diffLines,
- A2(elm$core$List$map, elm$core$Tuple$second, l));
- });
- var recurRangeHelper = function (_n10) {
- var x = _n10.a;
- var y = _n10.b;
- return _Utils_Tuple2(
- x,
- author$project$Writer$writeExpression(
- A2(stil4m$elm_syntax$Elm$Syntax$Node$Node, x, y)));
- };
- var fakeSepHelper = F2(
- function (f, l) {
- return A2(
- f,
- true,
- A2(elm$core$List$map, elm$core$Tuple$second, l));
- });
- switch (inner.$) {
- case 0:
- return stil4m$structured_writer$StructuredWriter$string('()');
- case 1:
- var xs = inner.a;
- if (!xs.b) {
- return stil4m$structured_writer$StructuredWriter$epsilon;
- } else {
- if (!xs.b.b) {
- var x = xs.a;
- var $temp$_n3 = x;
- _n3 = $temp$_n3;
- continue writeExpression;
- } else {
- var x = xs.a;
- var rest = xs.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writeExpression(x),
- A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepBySpace,
- A2(elm$core$List$map, recurRangeHelper, rest))
- ]));
- }
- }
- case 2:
- var x = inner.a;
- var dir = inner.b;
- var left = inner.c;
- var right = inner.d;
- switch (dir) {
- case 0:
- return A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepBySpace,
- _List_fromArray(
- [
- _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(left),
- author$project$Writer$writeExpression(left)),
- _Utils_Tuple2(
- range,
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(x),
- author$project$Writer$writeExpression(right)
- ])))
- ]));
- case 1:
- return A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepBySpace,
- _List_fromArray(
- [
- _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(left),
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writeExpression(left),
- stil4m$structured_writer$StructuredWriter$string(x)
- ]))),
- _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(right),
- author$project$Writer$writeExpression(right))
- ]));
- default:
- return A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepBySpace,
- _List_fromArray(
- [
- _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(left),
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writeExpression(left),
- stil4m$structured_writer$StructuredWriter$string(x)
- ]))),
- _Utils_Tuple2(
- stil4m$elm_syntax$Elm$Syntax$Node$range(right),
- author$project$Writer$writeExpression(right))
- ]));
- }
- case 3:
- var moduleName = inner.a;
- var name = inner.b;
- if (!moduleName.b) {
- return stil4m$structured_writer$StructuredWriter$string(name);
- } else {
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- author$project$Writer$writeModuleName(moduleName),
- stil4m$structured_writer$StructuredWriter$string('.'),
- stil4m$structured_writer$StructuredWriter$string(name)
- ]));
- }
- case 4:
- var condition = inner.a;
- var thenCase = inner.b;
- var elseCase = inner.c;
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('if'),
- author$project$Writer$writeExpression(condition),
- stil4m$structured_writer$StructuredWriter$string('then')
- ])),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- author$project$Writer$writeExpression(thenCase)),
- stil4m$structured_writer$StructuredWriter$string('else'),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- author$project$Writer$writeExpression(elseCase))
- ]));
- case 5:
- var x = inner.a;
- return stil4m$structured_writer$StructuredWriter$string('(' + (x + ')'));
- case 6:
- var x = inner.a;
- return stil4m$structured_writer$StructuredWriter$string(x);
- case 8:
- var h = inner.a;
- return stil4m$structured_writer$StructuredWriter$string('TODO');
- case 7:
- var i = inner.a;
- return stil4m$structured_writer$StructuredWriter$string(
- elm$core$String$fromInt(i));
- case 9:
- var f = inner.a;
- return stil4m$structured_writer$StructuredWriter$string(
- elm$core$String$fromFloat(f));
- case 10:
- var x = inner.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$append,
- stil4m$structured_writer$StructuredWriter$string('-'),
- author$project$Writer$writeExpression(x));
- case 11:
- var s = inner.a;
- return stil4m$structured_writer$StructuredWriter$string('\"' + (s + '\"'));
- case 12:
- var c = inner.a;
- return stil4m$structured_writer$StructuredWriter$string(
- '\'' + (elm$core$String$fromList(
- _List_fromArray(
- [c])) + '\''));
- case 13:
- var t = inner.a;
- return A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepByComma,
- A2(elm$core$List$map, recurRangeHelper, t));
- case 14:
- var x = inner.a;
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('('),
- author$project$Writer$writeExpression(x),
- stil4m$structured_writer$StructuredWriter$string(')')
- ]));
- case 15:
- var letBlock = inner.a;
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('let'),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- stil4m$structured_writer$StructuredWriter$breaked(
- A2(elm$core$List$map, author$project$Writer$writeLetDeclaration, letBlock.bw))),
- stil4m$structured_writer$StructuredWriter$string('in'),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- author$project$Writer$writeExpression(letBlock.bC))
- ]));
- case 16:
- var caseBlock = inner.a;
- var writeCaseBranch = function (_n8) {
- var pattern = _n8.a;
- var expression = _n8.b;
- return A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- author$project$Writer$writePattern(pattern),
- stil4m$structured_writer$StructuredWriter$string('->')
- ])),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 2,
- author$project$Writer$writeExpression(expression))
- ])));
- };
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('case'),
- author$project$Writer$writeExpression(caseBlock.bC),
- stil4m$structured_writer$StructuredWriter$string('of')
- ])),
- stil4m$structured_writer$StructuredWriter$breaked(
- A2(elm$core$List$map, writeCaseBranch, caseBlock.bp))
- ]));
- case 17:
- var lambda = inner.a;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('\\'),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(elm$core$List$map, author$project$Writer$writePattern, lambda.bi))
- ])),
- stil4m$structured_writer$StructuredWriter$string('->'),
- author$project$Writer$writeExpression(lambda.bC)
- ]));
- case 18:
- var setters = inner.a;
- return A2(
- stil4m$structured_writer$StructuredWriter$bracesComma,
- true,
- A2(
- elm$core$List$map,
- A2(
- elm$core$Basics$composeR,
- stil4m$elm_syntax$Elm$Syntax$Node$value,
- function (_n9) {
- var name = _n9.a;
- var expr = _n9.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$string('='),
- author$project$Writer$writeExpression(expr)
- ]));
- }),
- setters));
- case 19:
- var xs = inner.a;
- return A2(
- fakeSepHelper,
- stil4m$structured_writer$StructuredWriter$bracketsComma,
- A2(elm$core$List$map, recurRangeHelper, xs));
- case 20:
- var expression = inner.a;
- var accessor = inner.b;
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- author$project$Writer$writeExpression(expression),
- stil4m$structured_writer$StructuredWriter$string('.'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(accessor))
- ]));
- case 21:
- var s = inner.a;
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('.'),
- stil4m$structured_writer$StructuredWriter$string(s)
- ]));
- case 22:
- var name = inner.a;
- var updates = inner.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('{'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$string('|'),
- A2(
- sepHelper,
- stil4m$structured_writer$StructuredWriter$sepByComma,
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, writeRecordSetter),
- updates)),
- stil4m$structured_writer$StructuredWriter$string('}')
- ]));
- default:
- var s = inner.a;
- return stil4m$structured_writer$StructuredWriter$join(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('[glsl|'),
- stil4m$structured_writer$StructuredWriter$string(s),
- stil4m$structured_writer$StructuredWriter$string('|]')
- ]));
- }
- }
-};
-var author$project$Writer$writeFunction = function (_n2) {
- var documentation = _n2.by;
- var signature = _n2.bX;
- var declaration = _n2.bv;
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$maybe(
- A2(elm$core$Maybe$map, author$project$Writer$writeDocumentation, documentation)),
- stil4m$structured_writer$StructuredWriter$maybe(
- A2(
- elm$core$Maybe$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, author$project$Writer$writeSignature),
- signature)),
- author$project$Writer$writeFunctionImplementation(
- stil4m$elm_syntax$Elm$Syntax$Node$value(declaration))
- ]));
-};
-var author$project$Writer$writeFunctionImplementation = function (declaration) {
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(declaration.ae)),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(elm$core$List$map, author$project$Writer$writePattern, declaration.bk)),
- stil4m$structured_writer$StructuredWriter$string('=')
- ])),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 4,
- author$project$Writer$writeExpression(declaration.bC))
- ]));
-};
-var author$project$Writer$writeLetDeclaration = function (_n0) {
- var letDeclaration = _n0.b;
- if (!letDeclaration.$) {
- var _function = letDeclaration.a;
- return author$project$Writer$writeFunction(_function);
- } else {
- var pattern = letDeclaration.a;
- var expression = letDeclaration.b;
- return A2(author$project$Writer$writeDestructuring, pattern, expression);
- }
-};
-var author$project$Writer$writeInfix = function (_n0) {
- var direction = _n0.bx;
- var precedence = _n0.bT;
- var operator = _n0.bS;
- var _function = _n0.bE;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('infix'),
- function () {
- var _n1 = stil4m$elm_syntax$Elm$Syntax$Node$value(direction);
- switch (_n1) {
- case 0:
- return stil4m$structured_writer$StructuredWriter$string('left');
- case 1:
- return stil4m$structured_writer$StructuredWriter$string('right');
- default:
- return stil4m$structured_writer$StructuredWriter$string('non');
- }
- }(),
- stil4m$structured_writer$StructuredWriter$string(
- elm$core$String$fromInt(
- stil4m$elm_syntax$Elm$Syntax$Node$value(precedence))),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(operator)),
- stil4m$structured_writer$StructuredWriter$string('='),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(_function))
- ]));
-};
-var author$project$Writer$writePortDeclaration = function (signature) {
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('port'),
- author$project$Writer$writeSignature(signature)
- ]));
-};
-var author$project$Writer$writeValueConstructor = function (_n0) {
- var name = _n0.ae;
- var _arguments = _n0.bk;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(name)),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(elm$core$List$map, author$project$Writer$writeTypeAnnotation, _arguments))
- ]));
-};
-var stil4m$structured_writer$StructuredWriter$sepBy = stil4m$structured_writer$StructuredWriter$Sep;
-var author$project$Writer$writeType = function (type_) {
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('type'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(type_.ae)),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, stil4m$structured_writer$StructuredWriter$string),
- type_.aP))
- ])),
- function () {
- var diffLines = author$project$Writer$startOnDifferentLines(
- A2(elm$core$List$map, stil4m$elm_syntax$Elm$Syntax$Node$range, type_.aJ));
- return A3(
- stil4m$structured_writer$StructuredWriter$sepBy,
- _Utils_Tuple3('=', '|', ''),
- diffLines,
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, author$project$Writer$writeValueConstructor),
- type_.aJ));
- }()
- ]));
-};
-var author$project$Writer$writeTypeAlias = function (typeAlias) {
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('type alias'),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(typeAlias.ae)),
- stil4m$structured_writer$StructuredWriter$spaced(
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, stil4m$structured_writer$StructuredWriter$string),
- typeAlias.aP)),
- stil4m$structured_writer$StructuredWriter$string('=')
- ])),
- A2(
- stil4m$structured_writer$StructuredWriter$indent,
- 4,
- author$project$Writer$writeTypeAnnotation(typeAlias.b0))
- ]));
-};
-var author$project$Writer$writeDeclaration = function (_n0) {
- var decl = _n0.b;
- switch (decl.$) {
- case 0:
- var _function = decl.a;
- return author$project$Writer$writeFunction(_function);
- case 1:
- var typeAlias = decl.a;
- return author$project$Writer$writeTypeAlias(typeAlias);
- case 2:
- var type_ = decl.a;
- return author$project$Writer$writeType(type_);
- case 3:
- var p = decl.a;
- return author$project$Writer$writePortDeclaration(p);
- case 4:
- var i = decl.a;
- return author$project$Writer$writeInfix(i);
- default:
- var pattern = decl.a;
- var expression = decl.b;
- return A2(author$project$Writer$writeDestructuring, pattern, expression);
- }
-};
-var author$project$Writer$writeExpose = function (_n0) {
- var exp = _n0.b;
- switch (exp.$) {
- case 0:
- var x = exp.a;
- return stil4m$structured_writer$StructuredWriter$string('(' + (x + ')'));
- case 1:
- var f = exp.a;
- return stil4m$structured_writer$StructuredWriter$string(f);
- case 2:
- var t = exp.a;
- return stil4m$structured_writer$StructuredWriter$string(t);
- default:
- var name = exp.a.ae;
- var open = exp.a.bR;
- if (!open.$) {
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string(name),
- stil4m$structured_writer$StructuredWriter$string('(..)')
- ]));
- } else {
- return stil4m$structured_writer$StructuredWriter$string(name);
- }
- }
-};
-var author$project$Writer$writeExposureExpose = function (x) {
- if (!x.$) {
- return stil4m$structured_writer$StructuredWriter$string('exposing (..)');
- } else {
- var exposeList = x.a;
- var diffLines = author$project$Writer$startOnDifferentLines(
- A2(elm$core$List$map, stil4m$elm_syntax$Elm$Syntax$Node$range, exposeList));
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('exposing'),
- A2(
- stil4m$structured_writer$StructuredWriter$parensComma,
- diffLines,
- A2(elm$core$List$map, author$project$Writer$writeExpose, exposeList))
- ]));
- }
-};
-var author$project$Writer$writeImport = function (_n0) {
- var moduleName = _n0.O;
- var moduleAlias = _n0.W;
- var exposingList = _n0.M;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('import'),
- author$project$Writer$writeModuleName(
- stil4m$elm_syntax$Elm$Syntax$Node$value(moduleName)),
- stil4m$structured_writer$StructuredWriter$maybe(
- A2(
- elm$core$Maybe$map,
- A2(
- elm$core$Basics$composeR,
- stil4m$elm_syntax$Elm$Syntax$Node$value,
- A2(
- elm$core$Basics$composeR,
- author$project$Writer$writeModuleName,
- function (x) {
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('as'),
- x
- ]));
- })),
- moduleAlias)),
- stil4m$structured_writer$StructuredWriter$maybe(
- A2(elm$core$Maybe$map, author$project$Writer$writeExposureExpose, exposingList))
- ]));
-};
-var author$project$Writer$writeDefaultModuleData = function (_n0) {
- var moduleName = _n0.O;
- var exposingList = _n0.M;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('module'),
- author$project$Writer$writeModuleName(
- stil4m$elm_syntax$Elm$Syntax$Node$value(moduleName)),
- author$project$Writer$writeExposureExpose(
- stil4m$elm_syntax$Elm$Syntax$Node$value(exposingList))
- ]));
-};
-var author$project$Writer$writeWhere = function (input) {
- if (input.a.$ === 1) {
- if (input.b.$ === 1) {
- var _n1 = input.a;
- var _n2 = input.b;
- return stil4m$structured_writer$StructuredWriter$epsilon;
- } else {
- var _n4 = input.a;
- var x = input.b.a;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('where { subscription ='),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(x)),
- stil4m$structured_writer$StructuredWriter$string('}')
- ]));
- }
- } else {
- if (input.b.$ === 1) {
- var x = input.a.a;
- var _n3 = input.b;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('where { command ='),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(x)),
- stil4m$structured_writer$StructuredWriter$string('}')
- ]));
- } else {
- var x = input.a.a;
- var y = input.b.a;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('where { command ='),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(x)),
- stil4m$structured_writer$StructuredWriter$string(', subscription ='),
- stil4m$structured_writer$StructuredWriter$string(
- stil4m$elm_syntax$Elm$Syntax$Node$value(y)),
- stil4m$structured_writer$StructuredWriter$string('}')
- ]));
- }
- }
-};
-var author$project$Writer$writeEffectModuleData = function (_n0) {
- var moduleName = _n0.O;
- var exposingList = _n0.M;
- var command = _n0.bs;
- var subscription = _n0.bZ;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('effect'),
- stil4m$structured_writer$StructuredWriter$string('module'),
- author$project$Writer$writeModuleName(
- stil4m$elm_syntax$Elm$Syntax$Node$value(moduleName)),
- author$project$Writer$writeWhere(
- _Utils_Tuple2(command, subscription)),
- author$project$Writer$writeExposureExpose(
- stil4m$elm_syntax$Elm$Syntax$Node$value(exposingList))
- ]));
-};
-var author$project$Writer$writeModule = function (m) {
- switch (m.$) {
- case 0:
- var defaultModuleData = m.a;
- return author$project$Writer$writeDefaultModuleData(defaultModuleData);
- case 1:
- var defaultModuleData = m.a;
- return stil4m$structured_writer$StructuredWriter$spaced(
- _List_fromArray(
- [
- stil4m$structured_writer$StructuredWriter$string('port'),
- author$project$Writer$writeDefaultModuleData(defaultModuleData)
- ]));
- default:
- var effectModuleData = m.a;
- return author$project$Writer$writeEffectModuleData(effectModuleData);
- }
-};
-var author$project$Writer$writeFile = function (file) {
- return stil4m$structured_writer$StructuredWriter$breaked(
- _List_fromArray(
- [
- author$project$Writer$writeModule(
- stil4m$elm_syntax$Elm$Syntax$Node$value(file.bO)),
- stil4m$structured_writer$StructuredWriter$breaked(
- A2(
- elm$core$List$map,
- A2(elm$core$Basics$composeR, stil4m$elm_syntax$Elm$Syntax$Node$value, author$project$Writer$writeImport),
- file.bI)),
- stil4m$structured_writer$StructuredWriter$breaked(
- A2(elm$core$List$map, author$project$Writer$writeDeclaration, file.bw))
- ]));
-};
-var author$project$Decoder$styleCode = A2(
- elm$json$Json$Decode$map,
- A2(
- elm$core$Basics$composeR,
- author$project$Decoder$file,
- A2(elm$core$Basics$composeR, author$project$Writer$writeFile, author$project$Writer$write)),
- author$project$Decoder$style);
-var author$project$Main$LoadStyle = {$: 1};
-var author$project$Main$StyleURLChanged = function (a) {
- return {$: 2, a: a};
-};
-var author$project$Main$TokenChanged = function (a) {
- return {$: 3, a: a};
-};
-var elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) {
- switch (handler.$) {
- case 0:
- return 0;
- case 1:
- return 1;
- case 2:
- return 2;
- default:
- return 3;
- }
-};
-var elm$html$Html$div = _VirtualDom_node('div');
-var elm$html$Html$input = _VirtualDom_node('input');
-var elm$html$Html$label = _VirtualDom_node('label');
-var elm$virtual_dom$VirtualDom$text = _VirtualDom_text;
-var elm$html$Html$text = elm$virtual_dom$VirtualDom$text;
-var elm$json$Json$Encode$string = _Json_wrap;
-var elm$html$Html$Attributes$stringProperty = F2(
- function (key, string) {
- return A2(
- _VirtualDom_property,
- key,
- elm$json$Json$Encode$string(string));
- });
-var elm$html$Html$Attributes$type_ = elm$html$Html$Attributes$stringProperty('type');
-var elm$html$Html$Attributes$value = elm$html$Html$Attributes$stringProperty('value');
-var elm$virtual_dom$VirtualDom$Normal = function (a) {
- return {$: 0, a: a};
-};
-var elm$virtual_dom$VirtualDom$on = _VirtualDom_on;
-var elm$html$Html$Events$on = F2(
- function (event, decoder) {
- return A2(
- elm$virtual_dom$VirtualDom$on,
- event,
- elm$virtual_dom$VirtualDom$Normal(decoder));
- });
-var elm$html$Html$Events$onClick = function (msg) {
- return A2(
- elm$html$Html$Events$on,
- 'click',
- elm$json$Json$Decode$succeed(msg));
-};
-var elm$html$Html$Events$alwaysStop = function (x) {
- return _Utils_Tuple2(x, true);
-};
-var elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) {
- return {$: 1, a: a};
-};
-var elm$html$Html$Events$stopPropagationOn = F2(
- function (event, decoder) {
- return A2(
- elm$virtual_dom$VirtualDom$on,
- event,
- elm$virtual_dom$VirtualDom$MayStopPropagation(decoder));
- });
-var elm$json$Json$Decode$at = F2(
- function (fields, decoder) {
- return A3(elm$core$List$foldr, elm$json$Json$Decode$field, decoder, fields);
- });
-var elm$html$Html$Events$targetValue = A2(
- elm$json$Json$Decode$at,
- _List_fromArray(
- ['target', 'value']),
- elm$json$Json$Decode$string);
-var elm$html$Html$Events$onInput = function (tagger) {
- return A2(
- elm$html$Html$Events$stopPropagationOn,
- 'input',
- A2(
- elm$json$Json$Decode$map,
- elm$html$Html$Events$alwaysStop,
- A2(elm$json$Json$Decode$map, tagger, elm$html$Html$Events$targetValue)));
-};
-var author$project$Main$form = function (model) {
- return A2(
- elm$html$Html$div,
- _List_Nil,
- _List_fromArray(
- [
- A2(
- elm$html$Html$div,
- _List_Nil,
- _List_fromArray(
- [
- A2(
- elm$html$Html$label,
- _List_Nil,
- _List_fromArray(
- [
- elm$html$Html$text('Style URL:')
- ])),
- A2(
- elm$html$Html$input,
- _List_fromArray(
- [
- elm$html$Html$Attributes$type_('text'),
- elm$html$Html$Attributes$value(model.X),
- elm$html$Html$Events$onInput(author$project$Main$StyleURLChanged)
- ]),
- _List_Nil)
- ])),
- A2(
- elm$html$Html$div,
- _List_Nil,
- _List_fromArray(
- [
- A2(
- elm$html$Html$label,
- _List_Nil,
- _List_fromArray(
- [
- elm$html$Html$text('Token:')
- ])),
- A2(
- elm$html$Html$input,
- _List_fromArray(
- [
- elm$html$Html$Attributes$type_('text'),
- elm$html$Html$Attributes$value(model.Y),
- elm$html$Html$Events$onInput(author$project$Main$TokenChanged)
- ]),
- _List_Nil)
- ])),
- A2(
- elm$html$Html$div,
- _List_Nil,
- _List_fromArray(
- [
- A2(
- elm$html$Html$input,
- _List_fromArray(
- [
- elm$html$Html$Attributes$type_('submit'),
- elm$html$Html$Attributes$value('Fetch'),
- elm$html$Html$Events$onClick(author$project$Main$LoadStyle)
- ]),
- _List_Nil)
- ]))
- ]));
-};
-var author$project$Main$resultToString = function (r) {
- if (!r.$) {
- var s = r.a;
- return s;
- } else {
- var s = r.a;
- return s;
- }
-};
-var elm$html$Html$p = _VirtualDom_node('p');
-var elm$html$Html$pre = _VirtualDom_node('pre');
-var elm$virtual_dom$VirtualDom$style = _VirtualDom_style;
-var elm$html$Html$Attributes$style = elm$virtual_dom$VirtualDom$style;
-var elm$json$Json$Decode$decodeString = _Json_runOnString;
-var author$project$Main$view = function (model) {
- return {
- bm: _List_fromArray(
- [
- author$project$Main$form(model),
- function () {
- var _n0 = _Utils_Tuple2(model.aa, model.aB);
- if (!_n0.a.$) {
- var err = _n0.a.a;
- return A2(
- elm$html$Html$p,
- _List_fromArray(
- [
- A2(elm$html$Html$Attributes$style, 'color', 'red')
- ]),
- _List_fromArray(
- [
- elm$html$Html$text(err)
- ]));
- } else {
- if (!_n0.b.$) {
- var _n1 = _n0.a;
- var styl = _n0.b.a;
- return A2(
- elm$html$Html$pre,
- _List_Nil,
- _List_fromArray(
- [
- elm$html$Html$text(
- author$project$Main$resultToString(
- A2(
- elm$core$Result$mapError,
- elm$json$Json$Decode$errorToString,
- A2(elm$json$Json$Decode$decodeString, author$project$Decoder$styleCode, styl))))
- ]));
- } else {
- var _n2 = _n0.a;
- var _n3 = _n0.b;
- return A2(
- elm$html$Html$p,
- _List_Nil,
- _List_fromArray(
- [
- elm$html$Html$text('This is a tool that helps you generate elm-mapbox styles from Mapbox Studio. In Studio, hit the share button. This will give you the above two pieces of information. Then hit fetch. This tool will attempt to generate an elm-mapbox style for you. It is not perfect, but should give a nice head-start. Run the output through elm-format, than fix any compiler warnings. Then fix any Debug.todo calls.')
- ]));
- }
- }
- }()
- ]),
- b$: 'Style Generator'
- };
-};
-var elm$browser$Browser$External = function (a) {
- return {$: 1, a: a};
-};
-var elm$browser$Browser$Internal = function (a) {
- return {$: 0, a: a};
-};
-var elm$browser$Browser$Dom$NotFound = elm$core$Basics$identity;
-var elm$core$Basics$never = function (_n0) {
- never:
- while (true) {
- var nvr = _n0;
- var $temp$_n0 = nvr;
- _n0 = $temp$_n0;
- continue never;
- }
-};
-var elm$core$Task$perform = F2(
- function (toMessage, task) {
- return elm$core$Task$command(
- A2(elm$core$Task$map, toMessage, task));
- });
-var elm$core$String$dropLeft = F2(
- function (n, string) {
- return (n < 1) ? string : A3(
- elm$core$String$slice,
- n,
- elm$core$String$length(string),
- string);
- });
-var elm$core$String$startsWith = _String_startsWith;
-var elm$url$Url$Http = 0;
-var elm$url$Url$Https = 1;
-var elm$core$String$indexes = _String_indexes;
-var elm$core$String$left = F2(
- function (n, string) {
- return (n < 1) ? '' : A3(elm$core$String$slice, 0, n, string);
- });
-var elm$core$String$toInt = _String_toInt;
-var elm$url$Url$Url = F6(
- function (protocol, host, port_, path, query, fragment) {
- return {aO: fragment, aR: host, aY: path, a_: port_, a2: protocol, a3: query};
- });
-var elm$url$Url$chompBeforePath = F5(
- function (protocol, path, params, frag, str) {
- if (elm$core$String$isEmpty(str) || A2(elm$core$String$contains, '@', str)) {
- return elm$core$Maybe$Nothing;
- } else {
- var _n0 = A2(elm$core$String$indexes, ':', str);
- if (!_n0.b) {
- return elm$core$Maybe$Just(
- A6(elm$url$Url$Url, protocol, str, elm$core$Maybe$Nothing, path, params, frag));
- } else {
- if (!_n0.b.b) {
- var i = _n0.a;
- var _n1 = elm$core$String$toInt(
- A2(elm$core$String$dropLeft, i + 1, str));
- if (_n1.$ === 1) {
- return elm$core$Maybe$Nothing;
- } else {
- var port_ = _n1;
- return elm$core$Maybe$Just(
- A6(
- elm$url$Url$Url,
- protocol,
- A2(elm$core$String$left, i, str),
- port_,
- path,
- params,
- frag));
- }
- } else {
- return elm$core$Maybe$Nothing;
- }
- }
- }
- });
-var elm$url$Url$chompBeforeQuery = F4(
- function (protocol, params, frag, str) {
- if (elm$core$String$isEmpty(str)) {
- return elm$core$Maybe$Nothing;
- } else {
- var _n0 = A2(elm$core$String$indexes, '/', str);
- if (!_n0.b) {
- return A5(elm$url$Url$chompBeforePath, protocol, '/', params, frag, str);
- } else {
- var i = _n0.a;
- return A5(
- elm$url$Url$chompBeforePath,
- protocol,
- A2(elm$core$String$dropLeft, i, str),
- params,
- frag,
- A2(elm$core$String$left, i, str));
- }
- }
- });
-var elm$url$Url$chompBeforeFragment = F3(
- function (protocol, frag, str) {
- if (elm$core$String$isEmpty(str)) {
- return elm$core$Maybe$Nothing;
- } else {
- var _n0 = A2(elm$core$String$indexes, '?', str);
- if (!_n0.b) {
- return A4(elm$url$Url$chompBeforeQuery, protocol, elm$core$Maybe$Nothing, frag, str);
- } else {
- var i = _n0.a;
- return A4(
- elm$url$Url$chompBeforeQuery,
- protocol,
- elm$core$Maybe$Just(
- A2(elm$core$String$dropLeft, i + 1, str)),
- frag,
- A2(elm$core$String$left, i, str));
- }
- }
- });
-var elm$url$Url$chompAfterProtocol = F2(
- function (protocol, str) {
- if (elm$core$String$isEmpty(str)) {
- return elm$core$Maybe$Nothing;
- } else {
- var _n0 = A2(elm$core$String$indexes, '#', str);
- if (!_n0.b) {
- return A3(elm$url$Url$chompBeforeFragment, protocol, elm$core$Maybe$Nothing, str);
- } else {
- var i = _n0.a;
- return A3(
- elm$url$Url$chompBeforeFragment,
- protocol,
- elm$core$Maybe$Just(
- A2(elm$core$String$dropLeft, i + 1, str)),
- A2(elm$core$String$left, i, str));
- }
- }
- });
-var elm$url$Url$fromString = function (str) {
- return A2(elm$core$String$startsWith, 'http://', str) ? A2(
- elm$url$Url$chompAfterProtocol,
- 0,
- A2(elm$core$String$dropLeft, 7, str)) : (A2(elm$core$String$startsWith, 'https://', str) ? A2(
- elm$url$Url$chompAfterProtocol,
- 1,
- A2(elm$core$String$dropLeft, 8, str)) : elm$core$Maybe$Nothing);
-};
-var elm$browser$Browser$document = _Browser_document;
-var author$project$Main$main = elm$browser$Browser$document(
- {bJ: author$project$Main$init, b_: author$project$Main$subscriptions, b1: author$project$Main$update, b4: author$project$Main$view});
-_Platform_export({'Main':{'init':author$project$Main$main(
- elm$json$Json$Decode$succeed(0))(0)}});}(this));
-
-var app = Elm.Main.init({ node: document.getElementById("elm-f0111bc4e658d0f98db96260c16f7e49") });
-if (document.getElementById("elm-f0111bc4e658d0f98db96260c16f7e49"))
-{
- document.getElementById("elm-f0111bc4e658d0f98db96260c16f7e49").innerText = 'This is a headless program, meaning there is nothing to show here.\n\nI started the program anyway though, and you can access it as `app` in the developer console.';
-}
-</script>
-</body>
-</html> \ No newline at end of file
+<!DOCTYPE html><html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Mapbox Style to Elm</title> <link rel="stylesheet" href="/style-generator.90798390.css"></head> <body> <script src="/style-generator.e65d4760.js"></script> </body> </html> \ No newline at end of file
diff --git a/docs/style-generator/style-generator.3de3c5f3.map b/docs/style-generator/style-generator.3de3c5f3.map
new file mode 100644
index 0000000..a22715b
--- /dev/null
+++ b/docs/style-generator/style-generator.3de3c5f3.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/base64-js/index.js","node_modules/ieee754/index.js","node_modules/isarray/index.js","node_modules/buffer/index.js","../style-spec.js","../../../node_modules/json-stringify-pretty-compact/index.js","../format.js","../../../node_modules/url/node_modules/punycode/punycode.js","../../../node_modules/url/util.js","../../../node_modules/querystring/decode.js","../../../node_modules/querystring/encode.js","../../../node_modules/querystring/index.js","../../../node_modules/url/url.js","../visit.js","../migrate/v8.js","../util/extend.js","../expression/parsing_error.js","../expression/scope.js","../expression/types.js","../../../node_modules/csscolorparser/csscolorparser.js","../util/color.js","../expression/types/collator.js","../expression/types/formatted.js","../expression/values.js","../expression/definitions/literal.js","../expression/runtime_error.js","../expression/definitions/assertion.js","../expression/definitions/format.js","../expression/definitions/coercion.js","../expression/evaluation_context.js","../expression/compound_expression.js","../expression/definitions/collator.js","../expression/is_constant.js","../expression/definitions/var.js","../expression/parsing_context.js","../expression/stops.js","../expression/definitions/step.js","../../../node_modules/@mapbox/unitbezier/index.js","../util/interpolate.js","../util/color_spaces.js","../expression/definitions/interpolate.js","../expression/definitions/coalesce.js","../expression/definitions/let.js","../expression/definitions/at.js","../expression/definitions/match.js","../expression/definitions/case.js","../expression/definitions/comparison.js","../expression/definitions/length.js","../expression/definitions/index.js","../util/result.js","../util/properties.js","../util/get_type.js","../function/index.js","../expression/index.js","../function/convert.js","../feature_filter/index.js","../feature_filter/convert.js","../util/deep_equal.js","../diff.js","../error/validation_error.js","../error/parsing_error.js","../validate/validate_constants.js","../util/unbundle_jsonlint.js","../validate/validate_object.js","../validate/validate_array.js","../validate/validate_number.js","../validate/validate_function.js","../validate/validate_expression.js","../validate/validate_enum.js","../validate/validate_filter.js","../validate/validate_property.js","../validate/validate_paint_property.js","../validate/validate_layout_property.js","../validate/validate_layer.js","../validate/validate_source.js","../validate/validate_light.js","../validate/validate_string.js","../validate/validate.js","../validate/validate_boolean.js","../validate/validate_color.js","../validate/validate_formatted.js","../validate/validate_glyphs_url.js","../validate_style.min.js","../../../node_modules/@mapbox/jsonlint-lines-primitives/lib/jsonlint.js","../validate_style.js","../migrate.js","../migrate/expressions.js","../composite.js","node_modules/@mapbox/mapbox-gl-style-spec/util/ref_properties.js","node_modules/@mapbox/mapbox-gl-style-spec/deref.js","node_modules/@mapbox/mapbox-gl-style-spec/migrate/v9.js","node_modules/codemirror/lib/codemirror.js","node_modules/codemirror/mode/elm/elm.js","node_modules/codemirror/mode/javascript/javascript.js","index.js"],"names":["sortKeysBy","obj","reference","const","result","key","undefined","global","this","require$$0","require$$1","getPropertyReference","propertyName","let","i","Reference","layout","length","paint","eachSource","style","callback","k","sources","eachLayer","layers","eachProperty","options","inner","layer","propertyType","properties","Object","keys","forEach","path","id","value","set","x","eachLayout","indexOf","eachPaint","resolveConstant","constants","renameProperty","from","to","Array","isArray","stops","ParsingError","message","super","Error","Scope","parent","bindings","ref","name","expression","concat","get","has","NullType","kind","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","CollatorType","FormattedType","array","itemType","N","toString","type","valueMemberTypes","checkSubtype","expected","t","Color","r","g","b","a","parse","input","rgba","parseCSSColor","toArray","Math","round","black","white","transparent","red","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","text","scale","fontStack","Formatted","sections","validateRGBA","join","typeOf","String","JSON","stringify","fromString","unformatted","map","section","serialize","serialized","push","split","Literal","args","context","error","isValue","mixed","expectedType","evaluate","eachChild","possibleOutputs","RuntimeError","toJSON","types","string","number","boolean","object","Assertion","floor","parsed","ctx","fn","arg","FormatExpression","font","Coercion","Boolean","c","parseColor","num","Number","isNaN","valueToString","child","geometryTypes","EvaluationContext","globals","feature","featureState","_parseColorCache","geometryType","cached","CompoundExpression","_evaluate","op","definition","definitions","availableOverloads","overloads","filter","signature","signatureContext","params","ParsingContext","registry","scope","parsedArgs","argParseFailed","errors","ref$1","signatures","stringifySignature","actualTypes","register","CollatorExpression","isFeatureConstant","e","test","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","part","findStopLessThanOrEqualTo","currentValue","upperValue","lowerIndex","upperIndex","currentIndex","max","expr","index","_parse","annotate","typeAnnotation","Expr","actual","isConstant","isTypeAnnotation","childrenConstant","ec","Step","labels","outputs","label","rest","outputType","unshift","Infinity","labelKey","valueKey","stopCount","output","d","Xn","Yn","Zn","t0","t1","t2","t3","deg2rad","PI","rad2deg","xyz2lab","pow","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","l","y","alpha","labToRgb","labColor","z","interpolateHue","lab","forward","reverse","interpolate","interpolateNumber","hcl","h","atan2","sqrt","hclColor","cos","sin","Interpolate","operator","interpolation","exponentialInterpolation","base","lowerValue","difference","progress","interpolationFactor","lower","upper","controlPoints","UnitBezier","solve","slice","some","outputLower","outputUpper","toLowerCase","Coalesce","needsAnnotation","Let","At","Match","inputType","cases","otherwise","labelContext","abs","MAX_SAFE_INTEGER","out","groupedByOutput","outputLookup","sortedLabels","sort","outputIndex","coerceLabel","Case","branches","isComparableType","eqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","hasUntypedArgument","Comparison","lt","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","Length","expressions","v","varargs","success","supportsPropertyExpression","spec","supportsZoomExpression","parameters","supportsInterpolation","interpolated","getType","val","isFunction","identityFunction","createFunction","propertySpec","innerFun","hashedStops","categoricalKeyType","isColor","zoomAndFeatureDependent","featureDependent","property","zoomDependent","extend","stop","default","colorSpace","colorSpaces","evaluateExponentialFunction","evaluateIntervalFunction","evaluateCategoricalFunction","create","evaluateIdentityFunction","featureFunctions","zoomStops","s","zoom","featureFunctionStops","bind","_","coalesce","keyType","n","interp","colorspace","evaluatedLower","apply","evaluatedUpper","values","typeToString","heatmapDensity","lineProgress","LN2","E","log","LN10","tan","asin","acos","atan","min","ceil","binarySearch","j","m","isSupportedScript","toUpperCase","StyleExpression","_warningHistory","_evaluator","_defaultValue","_enumValues","isExpression","createExpression","parser","color","enum","formatted","getExpectedType","evaluateWithoutErrorHandling","console","warn","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","zoomCurve","_interpolationType","createPropertyExpression","isZoomConstant","findZoomCurve","childResult","StylePropertyFunction","specification","_parameters","_specification","convertLiteral","convertFunction","splice","convertIdentityFunction","tokens","convertTokenString","featureFunctionParameters","getFunctionType","getInterpolateOperator","convertPropertyFunction","appendStopPair","fixupDegenerateStepCurve","convertZoomAndPropertyFunction","isStep","convertZoomFunction","curve","re","pos","match","exec","literal","lastIndex","isExpressionFilter","f","deserialize","filterSpec","convertFilter","filters","convertComparisonOp","convertNegation","convertInOp","convertHasOp","_convertFilter","expectedTypes","converted","children","typechecks","conditions","runtimeTypeChecks","negate","uniformTypes","deepEqual","operations","setStyle","addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setGeoJSONSourceData","setLayerZoomRange","setLayerProperty","setCenter","setZoom","setBearing","setPitch","setSprite","setGlyphs","setTransition","setLight","sourceId","after","commands","command","sourcesRemoved","updateSource","canUpdateGeoJSON","before","prop","hasOwnProperty","isEqual","diffLayerPropertyChanges","layerId","klass","pluckId","indexById","group","ValidationError","identifier","__line__","line","parseInt","validateConstants","unbundle","valueOf","deepUnbundle","validateObject","elementSpecs","valueSpec","elementValidators","objectElementValidators","styleSpec","objectKey","elementSpecKey","elementSpec","validateElement","validateSpec","required","validateArray","arraySpec","validateArrayElement","arrayElementValidator","validate","arrayElementSpec","$version","function","arrayIndex","validateNumber","minimum","maximum","validateFunction","stopKeyType","previousStopDomainValue","previousStopDomainZoom","functionValueSpec","functionType","stopDomainValues","isZoomFunction","isPropertyFunction","isZoomAndPropertyFunction","validateFunctionStop","validateStopDomainValue","reportValue","isFinite","validateExpression","expressionContext","propertyKey","validateEnum","validateFilter","validateNonExpressionFilter","filter_operator","geometry_type","validateProperty","layerSpec","layerType","transitionMatch","transition","tokenMatch","glyphs","validatePaintProperty","validateLayoutProperty","validateLayer","otherLayer","p","source","sourceType","lineMetrics","validateSource","replace","source_geojson","source_video","source_image","validateLight","light","lightSpec","rootType","validateString","VALIDATORS","validateStyleMin","latestStyleSpec","$root","validateGlyphsURL","sortErrors","wrapCleanErrors","paintProperty","layoutProperty","validateStyle","Buffer","jsonlint","v8","normalizePropertyExpression","err","constant","styleFunction","visit","latest","space","stringifyPretty","indent","version","center","bearing","pitch","sprite","removeOrAddSourceCommands","data","diffSources","beforeLayers","beforeLayer","afterLayer","insertBeforeLayerId","beforeOrder","afterOrder","beforeIndex","reduce","afterIndex","tracker","clean","lastIndexOf","minzoom","maxzoom","diffLayers","compiled","globalProperties","deref","derefLayers","app","Elm","Main","init","customElements","define","_editorValue","HTMLElement","_editor","identUnit","mode","_mode","lineNumbers","readOnly","_readonly","lineWrapping","on","getValue","dispatchEvent","CustomEvent","detail","getBoundingClientRect","width","height","setSize","setValue","setOption","ports","requestStyleUpgrade","subscribe","migrated","styleUpgradeComplete","send"],"mappings":"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GAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,EAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,GAAG,EAAI,GAAG,EAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAI,GAAG,EAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,EAAE,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,EAAI,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,GAAG,EAAI,GAAG,EAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAI,GAAG,GAAK,EAAE,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,EAAE,EAAI,EAAE,EAAE,GAAG,EAAI,GAAG,EAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAI,GAAG,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","file":"style-generator.3de3c5f3.map","sourceRoot":"../../style-generator","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","// @flow\n\ntype ExpressionType = 'data-driven' | 'cross-faded' | 'cross-faded-data-driven' | 'color-ramp' | 'data-constant' | 'constant';\ntype ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress'>;\n\ntype ExpressionSpecification = {\n interpolated: boolean,\n parameters: ExpressionParameters\n}\n\nexport type StylePropertySpecification = {\n type: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: number\n} | {\n type: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string,\n tokens?: boolean\n} | {\n type: 'boolean',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: boolean\n} | {\n type: 'enum',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n values: {[string]: {}},\n transition: boolean,\n default?: string\n} | {\n type: 'color',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string\n} | {\n type: 'array',\n value: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array<number>\n} | {\n type: 'array',\n value: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array<string>\n};\n\nimport v8 from './reference/v8.json';\nimport latest from './reference/latest';\nimport format from './format';\nimport migrate from './migrate';\nimport composite from './composite';\nimport diff from './diff';\nimport ValidationError from './error/validation_error';\nimport ParsingError from './error/parsing_error';\nimport { StyleExpression, isExpression, createExpression, createPropertyExpression, normalizePropertyExpression, ZoomConstantExpression, ZoomDependentExpression, StylePropertyFunction } from './expression';\nimport featureFilter from './feature_filter';\nimport Color from './util/color';\nimport { createFunction, isFunction } from './function';\nimport convertFunction from './function/convert';\nimport { eachSource, eachLayer, eachProperty } from './visit';\n\nimport validate from './validate_style';\n\nconst expression = {\n StyleExpression,\n isExpression,\n createExpression,\n createPropertyExpression,\n normalizePropertyExpression,\n ZoomConstantExpression,\n ZoomDependentExpression,\n StylePropertyFunction\n};\n\nconst styleFunction = {\n convertFunction,\n createFunction,\n isFunction\n};\n\nconst visit = { eachSource, eachLayer, eachProperty };\n\nexport {\n v8,\n latest,\n format,\n migrate,\n composite,\n diff,\n ValidationError,\n ParsingError,\n expression,\n featureFilter,\n Color,\n styleFunction as function,\n validate,\n visit\n};\n\nvalidate.parsed = validate;\nvalidate.latest = validate;\n","function stringify (obj, options) {\n options = options || {}\n var indent = JSON.stringify([1], null, get(options, 'indent', 2)).slice(2, -3)\n var addMargin = get(options, 'margins', false)\n var maxLength = (indent === '' ? Infinity : get(options, 'maxLength', 80))\n\n return (function _stringify (obj, currentIndent, reserved) {\n if (obj && typeof obj.toJSON === 'function') {\n obj = obj.toJSON()\n }\n\n var string = JSON.stringify(obj)\n\n if (string === undefined) {\n return string\n }\n\n var length = maxLength - currentIndent.length - reserved\n\n if (string.length <= length) {\n var prettified = prettify(string, addMargin)\n if (prettified.length <= length) {\n return prettified\n }\n }\n\n if (typeof obj === 'object' && obj !== null) {\n var nextIndent = currentIndent + indent\n var items = []\n var delimiters\n var comma = function (array, index) {\n return (index === array.length - 1 ? 0 : 1)\n }\n\n if (Array.isArray(obj)) {\n for (var index = 0; index < obj.length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, comma(obj, index)) || 'null'\n )\n }\n delimiters = '[]'\n } else {\n Object.keys(obj).forEach(function (key, index, array) {\n var keyPart = JSON.stringify(key) + ': '\n var value = _stringify(obj[key], nextIndent,\n keyPart.length + comma(array, index))\n if (value !== undefined) {\n items.push(keyPart + value)\n }\n })\n delimiters = '{}'\n }\n\n if (items.length > 0) {\n return [\n delimiters[0],\n indent + items.join(',\\n' + nextIndent),\n delimiters[1]\n ].join('\\n' + currentIndent)\n }\n }\n\n return string\n }(obj, '', 0))\n}\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,\\][}{]/g\n\nfunction prettify (string, addMargin) {\n var m = addMargin ? ' ' : ''\n var tokens = {\n '{': '{' + m,\n '[': '[' + m,\n '}': m + '}',\n ']': m + ']',\n ',': ', ',\n ':': ': '\n }\n return string.replace(stringOrChar, function (match, string) {\n return string ? match : tokens[match]\n })\n}\n\nfunction get (options, name, defaultValue) {\n return (name in options ? options[name] : defaultValue)\n}\n\nmodule.exports = stringify\n","\nimport reference from './reference/latest.js';\nimport stringifyPretty from 'json-stringify-pretty-compact';\n\nfunction sortKeysBy(obj, reference) {\n const result = {};\n for (const key in reference) {\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (result[key] === undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * Format a Mapbox GL Style. Returns a stringified style with its keys\n * sorted in the same order as the reference style.\n *\n * The optional `space` argument is passed to\n * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * to generate formatted output.\n *\n * If `space` is unspecified, a default of `2` spaces will be used.\n *\n * @private\n * @param {Object} style a Mapbox GL Style\n * @param {number} [space] space argument to pass to `JSON.stringify`\n * @returns {string} stringified formatted JSON\n * @example\n * var fs = require('fs');\n * var format = require('mapbox-gl-style-spec').format;\n * var style = fs.readFileSync('./source.json', 'utf8');\n * fs.writeFileSync('./dest.json', format(style));\n * fs.writeFileSync('./dest.min.json', format(style, 0));\n */\nfunction format(style, space = 2) {\n style = sortKeysBy(style, reference.$root);\n\n if (style.layers) {\n style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer));\n }\n\n return stringifyPretty(style, {indent: space});\n}\n\nexport default format;\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// @flow\n\nimport Reference from './reference/v8.json';\nimport type {StylePropertySpecification} from './style-spec';\nimport type {\n StyleSpecification,\n SourceSpecification,\n LayerSpecification,\n PropertyValueSpecification,\n DataDrivenPropertyValueSpecification\n} from './types';\n\nfunction getPropertyReference(propertyName): StylePropertySpecification {\n for (let i = 0; i < Reference.layout.length; i++) {\n for (const key in Reference[Reference.layout[i]]) {\n if (key === propertyName) return (Reference[Reference.layout[i]][key]: any);\n }\n }\n for (let i = 0; i < Reference.paint.length; i++) {\n for (const key in Reference[Reference.paint[i]]) {\n if (key === propertyName) return (Reference[Reference.paint[i]][key]: any);\n }\n }\n\n return (null: any);\n}\n\nexport function eachSource(style: StyleSpecification, callback: (SourceSpecification) => void) {\n for (const k in style.sources) {\n callback(style.sources[k]);\n }\n}\n\nexport function eachLayer(style: StyleSpecification, callback: (LayerSpecification) => void) {\n for (const layer of style.layers) {\n callback(layer);\n }\n}\n\ntype PropertyCallback = ({\n path: [string, 'paint' | 'layout', string], // [layerid, paint/layout, property key]\n key: string,\n value: PropertyValueSpecification<mixed> | DataDrivenPropertyValueSpecification<mixed>,\n reference: StylePropertySpecification,\n set: (PropertyValueSpecification<mixed> | DataDrivenPropertyValueSpecification<mixed>) => void\n}) => void;\n\nexport function eachProperty(\n style: StyleSpecification,\n options: {paint?: boolean, layout?: boolean},\n callback: PropertyCallback\n) {\n function inner(layer, propertyType: 'paint' | 'layout') {\n const properties = (layer[propertyType]: any);\n if (!properties) return;\n Object.keys(properties).forEach((key) => {\n callback({\n path: [layer.id, propertyType, key],\n key,\n value: properties[key],\n reference: getPropertyReference(key),\n set(x) {\n properties[key] = x;\n }\n });\n });\n }\n\n eachLayer(style, (layer) => {\n if (options.paint) {\n inner(layer, 'paint');\n }\n if (options.layout) {\n inner(layer, 'layout');\n }\n });\n}\n","\nimport URL from 'url';\nimport {eachSource, eachLayer, eachProperty} from '../visit';\n\nfunction eachLayout(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('layout') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction eachPaint(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('paint') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction resolveConstant(style, value) {\n if (typeof value === 'string' && value[0] === '@') {\n return resolveConstant(style, style.constants[value]);\n } else {\n return value;\n }\n}\n\nfunction isFunction(value) {\n return Array.isArray(value.stops);\n}\n\nfunction renameProperty(obj, from, to) {\n obj[to] = obj[from]; delete obj[from];\n}\n\nexport default function(style) {\n style.version = 8;\n\n // Rename properties, reverse coordinates in source and layers\n eachSource(style, (source) => {\n if (source.type === 'video' && source.url !== undefined) {\n renameProperty(source, 'url', 'urls');\n }\n if (source.type === 'video') {\n source.coordinates.forEach((coord) => {\n return coord.reverse();\n });\n }\n });\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['symbol-min-distance'] !== undefined) {\n renameProperty(layout, 'symbol-min-distance', 'symbol-spacing');\n }\n });\n\n eachPaint(layer, (paint) => {\n if (paint['background-image'] !== undefined) {\n renameProperty(paint, 'background-image', 'background-pattern');\n }\n if (paint['line-image'] !== undefined) {\n renameProperty(paint, 'line-image', 'line-pattern');\n }\n if (paint['fill-image'] !== undefined) {\n renameProperty(paint, 'fill-image', 'fill-pattern');\n }\n });\n });\n\n // Inline Constants\n eachProperty(style, {paint: true, layout: true}, (property) => {\n const value = resolveConstant(style, property.value);\n\n if (isFunction(value)) {\n value.stops.forEach((stop) => {\n stop[1] = resolveConstant(style, stop[1]);\n });\n }\n\n property.set(value);\n });\n delete style.constants;\n\n eachLayer(style, (layer) => {\n // get rid of text-max-size, icon-max-size\n // turn text-size, icon-size into layout properties\n // https://github.com/mapbox/mapbox-gl-style-spec/issues/255\n\n eachLayout(layer, (layout) => {\n delete layout['text-max-size'];\n delete layout['icon-max-size'];\n });\n\n eachPaint(layer, (paint) => {\n if (paint['text-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['text-size'] = paint['text-size'];\n delete paint['text-size'];\n }\n\n if (paint['icon-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['icon-size'] = paint['icon-size'];\n delete paint['icon-size'];\n }\n });\n });\n\n function migrateFontstackURL(input) {\n const inputParsed = URL.parse(input);\n const inputPathnameParts = inputParsed.pathname.split('/');\n\n if (inputParsed.protocol !== 'mapbox:') {\n return input;\n\n } else if (inputParsed.hostname === 'fontstack') {\n assert(decodeURI(inputParsed.pathname) === '/{fontstack}/{range}.pbf');\n return 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf';\n\n } else if (inputParsed.hostname === 'fonts') {\n assert(inputPathnameParts[1] === 'v1');\n assert(decodeURI(inputPathnameParts[3]) === '{fontstack}');\n assert(decodeURI(inputPathnameParts[4]) === '{range}.pbf');\n return `mapbox://fonts/${inputPathnameParts[2]}/{fontstack}/{range}.pbf`;\n\n } else {\n assert(false);\n }\n\n function assert(predicate) {\n if (!predicate) {\n throw new Error(`Invalid font url: \"${input}\"`);\n }\n }\n }\n\n if (style.glyphs) {\n style.glyphs = migrateFontstackURL(style.glyphs);\n }\n\n function migrateFontStack(font) {\n function splitAndTrim(string) {\n return string.split(',').map((s) => {\n return s.trim();\n });\n }\n\n if (Array.isArray(font)) {\n // Assume it's a previously migrated font-array.\n return font;\n\n } else if (typeof font === 'string') {\n return splitAndTrim(font);\n\n } else if (typeof font === 'object') {\n font.stops.forEach((stop) => {\n stop[1] = splitAndTrim(stop[1]);\n });\n return font;\n\n } else {\n throw new Error(\"unexpected font value\");\n }\n }\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['text-font']) {\n layout['text-font'] = migrateFontStack(layout['text-font']);\n }\n });\n });\n\n // Reverse order of symbol layers. This is an imperfect migration.\n //\n // The order of a symbol layer in the layers list affects two things:\n // - how it is drawn relative to other layers (like oneway arrows below bridges)\n // - the placement priority compared to other layers\n //\n // It's impossible to reverse the placement priority without breaking the draw order\n // in some cases. This migration only reverses the order of symbol layers that\n // are above all other types of layers.\n //\n // Symbol layers that are at the top of the map preserve their priority.\n // Symbol layers that are below another type (line, fill) of layer preserve their draw order.\n\n let firstSymbolLayer = 0;\n for (let i = style.layers.length - 1; i >= 0; i--) {\n const layer = style.layers[i];\n if (layer.type !== 'symbol') {\n firstSymbolLayer = i + 1;\n break;\n }\n }\n\n const symbolLayers = style.layers.splice(firstSymbolLayer);\n symbolLayers.reverse();\n style.layers = style.layers.concat(symbolLayers);\n\n return style;\n}\n","\nexport default function (output, ...inputs) {\n for (const input of inputs) {\n for (const k in input) {\n output[k] = input[k];\n }\n }\n return output;\n}\n","// @flow\n\nclass ParsingError extends Error {\n key: string;\n message: string;\n constructor(key: string, message: string) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\n\nexport default ParsingError;\n","// @flow\n\nimport type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n parent: ?Scope;\n bindings: {[string]: Expression};\n constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n\n concat(bindings: Array<[string, Expression]>) {\n return new Scope(this, bindings);\n }\n\n get(name: string): Expression {\n if (this.bindings[name]) { return this.bindings[name]; }\n if (this.parent) { return this.parent.get(name); }\n throw new Error(`${name} not found in scope.`);\n }\n\n has(name: string): boolean {\n if (this.bindings[name]) return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\n\nexport default Scope;\n","// @flow\n\nexport type NullTypeT = { kind: 'null' };\nexport type NumberTypeT = { kind: 'number' };\nexport type StringTypeT = { kind: 'string' };\nexport type BooleanTypeT = { kind: 'boolean' };\nexport type ColorTypeT = { kind: 'color' };\nexport type ObjectTypeT = { kind: 'object' };\nexport type ValueTypeT = { kind: 'value' };\nexport type ErrorTypeT = { kind: 'error' };\nexport type CollatorTypeT = { kind: 'collator' };\nexport type FormattedTypeT = { kind: 'formatted' };\n\nexport type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite';\n\nexport type Type =\n NullTypeT |\n NumberTypeT |\n StringTypeT |\n BooleanTypeT |\n ColorTypeT |\n ObjectTypeT |\n ValueTypeT |\n ArrayType | // eslint-disable-line no-use-before-define\n ErrorTypeT |\n CollatorTypeT |\n FormattedTypeT\n\nexport type ArrayType = {\n kind: 'array',\n itemType: Type,\n N: ?number\n}\n\nexport const NullType = { kind: 'null' };\nexport const NumberType = { kind: 'number' };\nexport const StringType = { kind: 'string' };\nexport const BooleanType = { kind: 'boolean' };\nexport const ColorType = { kind: 'color' };\nexport const ObjectType = { kind: 'object' };\nexport const ValueType = { kind: 'value' };\nexport const ErrorType = { kind: 'error' };\nexport const CollatorType = { kind: 'collator' };\nexport const FormattedType = { kind: 'formatted' };\n\nexport function array(itemType: Type, N: ?number): ArrayType {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\n\nexport function toString(type: Type): string {\n if (type.kind === 'array') {\n const itemType = toString(type.itemType);\n return typeof type.N === 'number' ?\n `array<${itemType}, ${type.N}>` :\n type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;\n } else {\n return type.kind;\n }\n}\n\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array(ValueType)\n];\n\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nexport function checkSubtype(expected: Type, t: Type): ?string {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' &&\n ((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&\n (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n\n return `Expected ${toString(expected)} but found ${toString(t)} instead.`;\n}\n","// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"rebeccapurple\": [102,51,153,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n","// @flow\n\nimport { parseCSSColor } from 'csscolorparser';\n\n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n r: number;\n g: number;\n b: number;\n a: number;\n\n constructor(r: number, g: number, b: number, a: number = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n\n static black: Color;\n static white: Color;\n static transparent: Color;\n static red: Color;\n\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input: ?string): Color | void {\n if (!input) {\n return undefined;\n }\n\n if (input instanceof Color) {\n return input;\n }\n\n if (typeof input !== 'string') {\n return undefined;\n }\n\n const rgba = parseCSSColor(input);\n if (!rgba) {\n return undefined;\n }\n\n return new Color(\n rgba[0] / 255 * rgba[3],\n rgba[1] / 255 * rgba[3],\n rgba[2] / 255 * rgba[3],\n rgba[3]\n );\n }\n\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString(): string {\n const [r, g, b, a] = this.toArray();\n return `rgba(${Math.round(r)},${Math.round(g)},${Math.round(b)},${a})`;\n }\n\n toArray(): [number, number, number, number] {\n const {r, g, b, a} = this;\n return a === 0 ? [0, 0, 0, 0] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n}\n\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\n\nexport default Color;\n","// @flow\n\n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\n\ndeclare var Intl: {\n Collator: Class<Intl$Collator>\n};\n\ndeclare class Intl$Collator {\n constructor (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n static (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n compare (a: string, b: string): number;\n\n resolvedOptions(): any;\n}\n\ntype CollatorOptions = {\n localeMatcher?: 'lookup' | 'best fit',\n usage?: 'sort' | 'search',\n sensitivity?: 'base' | 'accent' | 'case' | 'variant',\n ignorePunctuation?: boolean,\n numeric?: boolean,\n caseFirst?: 'upper' | 'lower' | 'false'\n}\n\nexport default class Collator {\n locale: string | null;\n sensitivity: 'base' | 'accent' | 'case' | 'variant';\n collator: Intl$Collator;\n\n constructor(caseSensitive: boolean, diacriticSensitive: boolean, locale: string | null) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [],\n { sensitivity: this.sensitivity, usage: 'search' });\n }\n\n compare(lhs: string, rhs: string): number {\n return this.collator.compare(lhs, rhs);\n }\n\n resolvedLocale(): string {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : [])\n .resolvedOptions().locale;\n }\n}\n","// @flow\n\nexport class FormattedSection {\n text: string;\n scale: number | null;\n fontStack: string | null;\n\n constructor(text: string, scale: number | null, fontStack: string | null) {\n this.text = text;\n this.scale = scale;\n this.fontStack = fontStack;\n }\n}\n\nexport default class Formatted {\n sections: Array<FormattedSection>;\n\n constructor(sections: Array<FormattedSection>) {\n this.sections = sections;\n }\n\n static fromString(unformatted: string): Formatted {\n return new Formatted([new FormattedSection(unformatted, null, null)]);\n }\n\n toString(): string {\n return this.sections.map(section => section.text).join('');\n }\n\n serialize() {\n const serialized = [\"format\"];\n for (const section of this.sections) {\n serialized.push(section.text);\n const options = {};\n if (section.fontStack) {\n options[\"text-font\"] = [\"literal\", section.fontStack.split(',')];\n }\n if (section.scale) {\n options[\"font-scale\"] = section.scale;\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport Color from '../util/color';\nimport Collator from './types/collator';\nimport Formatted from './types/formatted';\nimport { NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, ValueType, CollatorType, FormattedType, array } from './types';\n\nimport type { Type } from './types';\n\nexport function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): ?string {\n if (!(\n typeof r === 'number' && r >= 0 && r <= 255 &&\n typeof g === 'number' && g >= 0 && g <= 255 &&\n typeof b === 'number' && b >= 0 && b <= 255\n )) {\n const value = typeof a === 'number' ? [r, g, b, a] : [r, g, b];\n return `Invalid rgba value [${value.join(', ')}]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n\n if (!(\n typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)\n )) {\n return `Invalid rgba value [${[r, g, b, a].join(', ')}]: 'a' must be between 0 and 1.`;\n }\n\n return null;\n}\n\nexport type Value = null | string | boolean | number | Color | Collator | Formatted | $ReadOnlyArray<Value> | { +[string]: Value }\n\nexport function isValue(mixed: mixed): boolean {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nexport function typeOf(value: Value): Type {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType: ?Type;\n\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n\n return array(itemType || ValueType, length);\n } else {\n assert(typeof value === 'object');\n return ObjectType;\n }\n}\n\nexport function toString(value: Value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color || value instanceof Formatted) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nexport { Color, Collator };\n","// @flow\n\nimport assert from 'assert';\nimport { isValue, typeOf, Color } from '../values';\nimport Formatted from '../types/formatted';\n\nimport type { Type } from '../types';\nimport type { Value } from '../values';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\n\nclass Literal implements Expression {\n type: Type;\n value: Value;\n\n constructor(type: Type, value: Value) {\n this.type = type;\n this.value = value;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n\n const value = (args[1]: any);\n let type = typeOf(value);\n\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (\n type.kind === 'array' &&\n type.N === 0 &&\n expected &&\n expected.kind === 'array' &&\n (typeof expected.N !== 'number' || expected.N === 0)\n ) {\n type = expected;\n }\n\n return new Literal(type, value);\n }\n\n evaluate() {\n return this.value;\n }\n\n eachChild() {}\n\n possibleOutputs() {\n return [this.value];\n }\n\n serialize(): Array<mixed> {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\"literal\", this.value];\n } else if (this.value instanceof Color) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return [\"rgba\"].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n assert(this.value === null ||\n typeof this.value === 'string' ||\n typeof this.value === 'number' ||\n typeof this.value === 'boolean');\n return (this.value: any);\n }\n }\n}\n\nexport default Literal;\n","// @flow\n\nclass RuntimeError {\n name: string;\n message: string;\n\n constructor(message: string) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n\n toJSON() {\n return this.message;\n }\n}\n\nexport default RuntimeError;\n","// @flow\n\nimport assert from 'assert';\n\nimport {\n ObjectType,\n ValueType,\n StringType,\n NumberType,\n BooleanType,\n checkSubtype,\n toString,\n array\n} from '../types';\nimport RuntimeError from '../runtime_error';\nimport { typeOf } from '../values';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nconst types = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\n\nclass Assertion implements Expression {\n type: Type;\n args: Array<Expression>;\n\n constructor(type: Type, args: Array<Expression>) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n let i = 1;\n let type;\n\n const name: string = (args[0]: any);\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types[type];\n i++;\n } else {\n itemType = ValueType;\n }\n\n let N;\n if (args.length > 3) {\n if (args[2] !== null &&\n (typeof args[2] !== 'number' ||\n args[2] < 0 ||\n args[2] !== Math.floor(args[2]))\n ) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n\n type = array(itemType, N);\n } else {\n assert(types[name], name);\n type = types[name];\n }\n\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Assertion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError(`Expected value to be of type ${toString(this.type)}, but found ${toString(typeOf(value))} instead.`);\n }\n }\n\n assert(false);\n return null;\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array<Value | void> {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize(): Array<mixed> {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' ||\n itemType.kind === 'number' ||\n itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\n\nexport default Assertion;\n","// @flow\n\nimport { NumberType, ValueType, FormattedType, array, StringType } from '../types';\nimport Formatted, { FormattedSection } from '../types/formatted';\nimport { toString } from '../values';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\ntype FormattedSectionExpression = {\n text: Expression,\n scale: Expression | null;\n font: Expression | null;\n}\n\nexport default class FormatExpression implements Expression {\n type: Type;\n sections: Array<FormattedSectionExpression>;\n\n constructor(sections: Array<FormattedSectionExpression>) {\n this.type = FormattedType;\n this.sections = sections;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n if (args.length < 3) {\n return context.error(`Expected at least two arguments.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n const sections: Array<FormattedSectionExpression> = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const text = context.parse(args[i], 1, ValueType);\n if (!text) return null;\n const kind = text.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null')\n return context.error(`Formatted text type must be 'string', 'value', or 'null'.`);\n\n const options = (args[i + 1]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`Format options argument must be an object.`);\n\n let scale = null;\n if (options['font-scale']) {\n scale = context.parse(options['font-scale'], 1, NumberType);\n if (!scale) return null;\n }\n\n let font = null;\n if (options['text-font']) {\n font = context.parse(options['text-font'], 1, array(StringType));\n if (!font) return null;\n }\n sections.push({text, scale, font});\n }\n\n return new FormatExpression(sections);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Formatted(\n this.sections.map(section =>\n new FormattedSection(\n toString(section.text.evaluate(ctx)),\n section.scale ? section.scale.evaluate(ctx) : null,\n section.font ? section.font.evaluate(ctx).join(',') : null\n )\n )\n );\n }\n\n eachChild(fn: (Expression) => void) {\n for (const section of this.sections) {\n fn(section.text);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n }\n }\n\n possibleOutputs() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return [undefined];\n }\n\n serialize() {\n const serialized = [\"format\"];\n for (const section of this.sections) {\n serialized.push(section.text.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport {BooleanType, ColorType, NumberType, StringType, ValueType} from '../types';\nimport {Color, toString as valueToString, validateRGBA} from '../values';\nimport RuntimeError from '../runtime_error';\nimport Formatted from '../types/formatted';\nimport FormatExpression from '../definitions/format';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nconst types = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion implements Expression {\n type: Type;\n args: Array<Expression>;\n\n constructor(type: Type, args: Array<Expression>) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n const name: string = (args[0]: any);\n assert(types[name], name);\n\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const type = types[name];\n\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Coercion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c) return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${JSON.stringify(input)}: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color((input[0]: any) / 255, (input[1]: any) / 255, (input[2]: any) / 255, (input[3]: any));\n }\n }\n }\n throw new RuntimeError(error || `Could not parse color from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null) return 0;\n const num = Number(value);\n if (isNaN(num)) continue;\n return num;\n }\n throw new RuntimeError(`Could not convert ${JSON.stringify(value)} to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(valueToString(this.args[0].evaluate(ctx)));\n } else {\n return valueToString(this.args[0].evaluate(ctx));\n }\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array<Value | void> {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{text: this.args[0], scale: null, font: null}]).serialize();\n }\n const serialized = [`to-${this.type.kind}`];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coercion;\n","// @flow\n\nimport { Color } from './values';\n\nimport type { GlobalProperties, Feature, FeatureState } from './index';\n\nconst geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nclass EvaluationContext {\n globals: GlobalProperties;\n feature: ?Feature;\n featureState: ?FeatureState;\n\n _parseColorCache: {[string]: ?Color};\n\n constructor() {\n this.globals = (null: any);\n this.feature = null;\n this.featureState = null;\n this._parseColorCache = {};\n }\n\n id() {\n return this.feature && 'id' in this.feature ? this.feature.id : null;\n }\n\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n\n properties() {\n return this.feature && this.feature.properties || {};\n }\n\n parseColor(input: string): ?Color {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color.parse(input);\n }\n return cached;\n }\n}\n\nexport default EvaluationContext;\n","// @flow\n\nimport { toString } from './types';\n\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport assert from 'assert';\n\nimport type { Expression, ExpressionRegistry } from './expression';\nimport type { Type } from './types';\nimport type { Value } from './values';\n\nexport type Varargs = {| type: Type |};\ntype Signature = Array<Type> | Varargs;\ntype Evaluate = (EvaluationContext, Array<Expression>) => Value;\ntype Definition = [Type, Signature, Evaluate] |\n {|type: Type, overloads: Array<[Signature, Evaluate]>|};\n\nclass CompoundExpression implements Expression {\n name: string;\n type: Type;\n _evaluate: Evaluate;\n args: Array<Expression>;\n\n static definitions: { [string]: Definition };\n\n constructor(name: string, type: Type, evaluate: Evaluate, args: Array<Expression>) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this._evaluate(ctx, this.args);\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize(): Array<mixed> {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n const op: string = (args[0]: any);\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n\n // Now check argument types against each signature\n const type = Array.isArray(definition) ?\n definition[0] : definition.type;\n\n const availableOverloads = Array.isArray(definition) ?\n [[definition[1], definition[2]]] :\n definition.overloads;\n\n const overloads = availableOverloads.filter(([signature]) => (\n !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n ));\n\n let signatureContext: ParsingContext = (null: any);\n\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext(context.registry, context.path, null, context.scope);\n\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs: Array<Expression> = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ?\n params[i - 1] :\n params.type;\n\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${params.length} arguments, but found ${parsedArgs.length} instead.`);\n continue;\n }\n }\n\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n\n assert(!signatureContext || signatureContext.errors.length > 0);\n\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected\n .map(([params]) => stringifySignature(params))\n .join(' | ');\n\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed) return null;\n actualTypes.push(toString(parsed.type));\n }\n context.error(`Expected arguments of type ${signatures}, but found (${actualTypes.join(', ')}) instead.`);\n }\n\n return null;\n }\n\n static register(\n registry: ExpressionRegistry,\n definitions: { [string]: Definition }\n ) {\n assert(!CompoundExpression.definitions);\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\n\nfunction stringifySignature(signature: Signature): string {\n if (Array.isArray(signature)) {\n return `(${signature.map(toString).join(', ')})`;\n } else {\n return `(${toString(signature.type)}...)`;\n }\n}\n\nexport default CompoundExpression;\n","// @flow\n\nimport { StringType, BooleanType, CollatorType } from '../types';\nimport Collator from '../types/collator';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\nexport default class CollatorExpression implements Expression {\n type: Type;\n caseSensitive: Expression;\n diacriticSensitive: Expression;\n locale: Expression | null;\n\n constructor(caseSensitive: Expression, diacriticSensitive: Expression, locale: Expression | null) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const options = (args[1]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n\n const caseSensitive = context.parse(\n options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive) return null;\n\n const diacriticSensitive = context.parse(\n options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive) return null;\n\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale) return null;\n }\n\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n\n possibleOutputs() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possibleOutputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possibleOutputs anyway, so we can get away with leaving this undefined for now.\n return [undefined];\n }\n\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\"collator\", options];\n }\n}\n","// @flow\n\nimport CompoundExpression from './compound_expression';\n\nimport type { Expression } from './expression.js';\n\nfunction isFeatureConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (\n e.name === 'properties' ||\n e.name === 'geometry-type' ||\n e.name === 'id'\n ) {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isStateConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isGlobalPropertyConstant(e: Expression, properties: Array<string>) {\n if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) { return false; }\n let result = true;\n e.eachChild((arg) => {\n if (result && !isGlobalPropertyConstant(arg, properties)) { result = false; }\n });\n return result;\n}\n\nexport { isFeatureConstant, isGlobalPropertyConstant, isStateConstant };\n","// @flow\n\nimport type { Type } from '../types';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Var implements Expression {\n type: Type;\n name: string;\n boundExpression: Expression;\n\n constructor(name: string, boundExpression: Expression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${name}\". Make sure \"${name}\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n\n return new Var(name, context.scope.get(name));\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.boundExpression.evaluate(ctx);\n }\n\n eachChild() {}\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n return [\"var\", this.name];\n }\n}\n\nexport default Var;\n","// @flow\n\nimport Scope from './scope';\nimport { checkSubtype } from './types';\nimport ParsingError from './parsing_error';\nimport Literal from './definitions/literal';\nimport Assertion from './definitions/assertion';\nimport Coercion from './definitions/coercion';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport CollatorExpression from './definitions/collator';\nimport {isGlobalPropertyConstant, isFeatureConstant} from './is_constant';\nimport Var from './definitions/var';\n\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Type} from './types';\n\n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n registry: ExpressionRegistry;\n path: Array<number>;\n key: string;\n scope: Scope;\n errors: Array<ParsingError>;\n\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n expectedType: ?Type;\n\n constructor(\n registry: ExpressionRegistry,\n path: Array<number> = [],\n expectedType: ?Type,\n scope: Scope = new Scope(),\n errors: Array<ParsingError> = []\n ) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${part}]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(\n expr: mixed,\n index?: number,\n expectedType?: ?Type,\n bindings?: Array<[string, Expression]>,\n options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'} = {}\n ): ?Expression {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n\n _parse(expr: mixed, options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'}): ?Expression {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = ['literal', expr];\n }\n\n function annotate(parsed, type, typeAnnotation: 'assert' | 'coerce' | 'omit') {\n if (typeAnnotation === 'assert') {\n return new Assertion(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion(type, [parsed]);\n } else {\n return parsed;\n }\n }\n\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${typeof op} instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed) return null;\n\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result.\n if (!(parsed instanceof Literal) && isConstant(parsed)) {\n const ec = new EvaluationContext();\n try {\n parsed = new Literal(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n\n return parsed;\n }\n\n return this.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${typeof expr} instead.`);\n }\n }\n\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index: number, expectedType?: ?Type, bindings?: Array<[string, Expression]>) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(\n this.registry,\n path,\n expectedType || null,\n scope,\n this.errors\n );\n }\n\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error: string, ...keys: Array<number>) {\n const key = `${this.key}${keys.map(k => `[${k}]`).join('')}`;\n this.errors.push(new ParsingError(key, error));\n }\n\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected: Type, t: Type): ?string {\n const error = checkSubtype(expected, t);\n if (error) this.error(error);\n return error;\n }\n}\n\nexport default ParsingContext;\n\nfunction isConstant(expression: Expression) {\n if (expression instanceof Var) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n }\n\n const isTypeAnnotation = expression instanceof Coercion ||\n expression instanceof Assertion;\n\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n\n return isFeatureConstant(expression) &&\n isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'is-supported-script']);\n}\n","// @flow\n\nimport RuntimeError from './runtime_error';\n\nimport type { Expression } from './expression';\n\nexport type Stops = Array<[number, Expression]>;\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nexport function findStopLessThanOrEqualTo(stops: Array<number>, input: number) {\n const n = stops.length;\n let lowerIndex = 0;\n let upperIndex = n - 1;\n let currentIndex = 0;\n let currentValue, upperValue;\n\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n upperValue = stops[currentIndex + 1];\n if (input === currentValue || input > currentValue && input < upperValue) { // Search complete\n return currentIndex;\n } else if (currentValue < input) {\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError('Input is not a number.');\n }\n }\n\n return Math.max(currentIndex - 1, 0);\n}\n","// @flow\n\nimport { NumberType } from '../types';\n\nimport { findStopLessThanOrEqualTo } from '../stops';\n\nimport type { Stops } from '../stops';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nclass Step implements Expression {\n type: Type;\n\n input: Expression;\n labels: Array<number>;\n outputs: Array<Expression>;\n\n constructor(type: Type, input: Expression, stops: Stops) {\n this.type = type;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n let [ , input, ...rest] = args;\n\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n input = context.parse(input, 1, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n rest.unshift(-Infinity);\n\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n\n const labelKey = i + 1;\n const valueKey = i + 2;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n return new Step(outputType, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n possibleOutputs(): Array<Value | void> {\n return [].concat(...this.outputs.map((output) => output.possibleOutputs()));\n }\n\n serialize() {\n const serialized = [\"step\", this.input.serialize()];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n\nexport default Step;\n","/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nmodule.exports = UnitBezier;\n\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3.0 * p1x;\n this.bx = 3.0 * (p2x - p1x) - this.cx;\n this.ax = 1.0 - this.cx - this.bx;\n\n this.cy = 3.0 * p1y;\n this.by = 3.0 * (p2y - p1y) - this.cy;\n this.ay = 1.0 - this.cy - this.by;\n\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\n\nUnitBezier.prototype.sampleCurveX = function(t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\n\nUnitBezier.prototype.sampleCurveY = function(t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\n\nUnitBezier.prototype.sampleCurveDerivativeX = function(t) {\n return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;\n};\n\nUnitBezier.prototype.solveCurveX = function(x, epsilon) {\n if (typeof epsilon === 'undefined') epsilon = 1e-6;\n\n var t0, t1, t2, x2, i;\n\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon) return t2;\n\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 1e-6) break;\n\n t2 = t2 - x2 / d2;\n }\n\n // Fall back to the bisection method for reliability.\n t0 = 0.0;\n t1 = 1.0;\n t2 = x;\n\n if (t2 < t0) return t0;\n if (t2 > t1) return t1;\n\n while (t0 < t1) {\n\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon) return t2;\n\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n\n t2 = (t1 - t0) * 0.5 + t0;\n }\n\n // Failure.\n return t2;\n};\n\nUnitBezier.prototype.solve = function(x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n","// @flow\n\nimport Color from './color';\n\nexport function number(a: number, b: number, t: number) {\n return (a * (1 - t)) + (b * t);\n}\n\nexport function color(from: Color, to: Color, t: number) {\n return new Color(\n number(from.r, to.r, t),\n number(from.g, to.g, t),\n number(from.b, to.b, t),\n number(from.a, to.a, t)\n );\n}\n\nexport function array(from: Array<number>, to: Array<number>, t: number): Array<number> {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n","// @flow\n\nimport Color from './color';\n\nimport {number as interpolateNumber} from './interpolate';\n\ntype LABColor = {\n l: number,\n a: number,\n b: number,\n alpha: number\n};\n\ntype HCLColor = {\n h: number,\n c: number,\n l: number,\n alpha: number\n};\n\n// Constants\nconst Xn = 0.950470, // D65 standard referent\n Yn = 1,\n Zn = 1.088830,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1,\n deg2rad = Math.PI / 180,\n rad2deg = 180 / Math.PI;\n\n// Utilities\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\n// LAB\nfunction rgbToLab(rgbColor: Color): LABColor {\n const b = rgb2xyz(rgbColor.r),\n a = rgb2xyz(rgbColor.g),\n l = rgb2xyz(rgbColor.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\n\nfunction labToRgb(labColor: LABColor): Color {\n let y = (labColor.l + 16) / 116,\n x = isNaN(labColor.a) ? y : y + labColor.a / 500,\n z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color(\n xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n labColor.alpha\n );\n}\n\nfunction interpolateLab(from: LABColor, to: LABColor, t: number) {\n return {\n l: interpolateNumber(from.l, to.l, t),\n a: interpolateNumber(from.a, to.a, t),\n b: interpolateNumber(from.b, to.b, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\n// HCL\nfunction rgbToHcl(rgbColor: Color): HCLColor {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\n\nfunction hclToRgb(hclColor: HCLColor): Color {\n const h = hclColor.h * deg2rad,\n c = hclColor.c,\n l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\n\nfunction interpolateHue(a: number, b: number, t: number) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\n\nfunction interpolateHcl(from: HCLColor, to: HCLColor, t: number) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: interpolateNumber(from.c, to.c, t),\n l: interpolateNumber(from.l, to.l, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\nexport const lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\n\nexport const hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n","// @flow\n\nimport UnitBezier from '@mapbox/unitbezier';\n\nimport * as interpolate from '../../util/interpolate';\nimport { toString, NumberType, ColorType } from '../types';\nimport { findStopLessThanOrEqualTo } from '../stops';\nimport { hcl, lab } from '../../util/color_spaces';\n\nimport type { Stops } from '../stops';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nexport type InterpolationType =\n { name: 'linear' } |\n { name: 'exponential', base: number } |\n { name: 'cubic-bezier', controlPoints: [number, number, number, number] };\n\nclass Interpolate implements Expression {\n type: Type;\n\n operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab';\n interpolation: InterpolationType;\n input: Expression;\n labels: Array<number>;\n outputs: Array<Expression>;\n\n constructor(type: Type, operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab', interpolation: InterpolationType, input: Expression, stops: Stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static interpolationFactor(interpolation: InterpolationType, input: number, lower: number, upper: number) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n let [operator, interpolation, input, ...rest] = args;\n\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n\n if (interpolation[0] === 'linear') {\n interpolation = { name: 'linear' };\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (\n controlPoints.length !== 4 ||\n controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)\n ) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: (controlPoints: any)\n };\n } else {\n return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0);\n }\n\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n input = context.parse(input, 2, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n\n const labelKey = i + 3;\n const valueKey = i + 4;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n if (outputType.kind !== 'number' &&\n outputType.kind !== 'color' &&\n !(\n outputType.kind === 'array' &&\n outputType.itemType.kind === 'number' &&\n typeof outputType.N === 'number'\n )\n ) {\n return context.error(`Type ${toString(outputType)} is not interpolatable.`);\n }\n\n return new Interpolate(outputType, (operator: any), interpolation, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n\n if (this.operator === 'interpolate') {\n return (interpolate[this.type.kind.toLowerCase()]: any)(outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n possibleOutputs(): Array<Value | void> {\n return [].concat(...this.outputs.map((output) => output.possibleOutputs()));\n }\n\n serialize(): Array<mixed> {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = [\"linear\"];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = [\"linear\"];\n } else {\n interpolation = [\"exponential\", this.interpolation.base];\n }\n } else {\n interpolation = [\"cubic-bezier\" ].concat(this.interpolation.controlPoints);\n }\n\n const serialized = [this.operator, interpolation, this.input.serialize()];\n\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(\n this.labels[i],\n this.outputs[i].serialize()\n );\n }\n return serialized;\n }\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n\nexport default Interpolate;\n","// @flow\n\nimport assert from 'assert';\n\nimport { checkSubtype, ValueType } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\nclass Coalesce implements Expression {\n type: Type;\n args: Array<Expression>;\n\n constructor(type: Type, args: Array<Expression>) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length < 2) {\n return context.error(\"Expectected at least one argument.\");\n }\n let outputType: Type = (null: any);\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, {typeAnnotation: 'omit'});\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n assert(outputType);\n\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType &&\n parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n\n return needsAnnotation ?\n new Coalesce(ValueType, parsedArgs) :\n new Coalesce((outputType: any), parsedArgs);\n }\n\n evaluate(ctx: EvaluationContext) {\n let result = null;\n for (const arg of this.args) {\n result = arg.evaluate(ctx);\n if (result !== null) break;\n }\n return result;\n }\n\n eachChild(fn: (Expression) => void) {\n this.args.forEach(fn);\n }\n\n possibleOutputs(): Array<Value | void> {\n return [].concat(...this.args.map((arg) => arg.possibleOutputs()));\n }\n\n serialize() {\n const serialized = [\"coalesce\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coalesce;\n","// @flow\n\nimport type { Type } from '../types';\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Let implements Expression {\n type: Type;\n bindings: Array<[string, Expression]>;\n result: Expression;\n\n constructor(bindings: Array<[string, Expression]>, result: Expression) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.result.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`);\n\n const bindings: Array<[string, Expression]> = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${typeof name} instead.`, i);\n }\n\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n\n const value = context.parse(args[i + 1], i + 1);\n if (!value) return null;\n\n bindings.push([name, value]);\n }\n\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result) return null;\n\n return new Let(bindings, result);\n }\n\n possibleOutputs() {\n return this.result.possibleOutputs();\n }\n\n serialize() {\n const serialized = [\"let\"];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\n\nexport default Let;\n","// @flow\n\nimport { array, ValueType, NumberType } from '../types';\n\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Type, ArrayType } from '../types';\nimport type { Value } from '../values';\n\nclass At implements Expression {\n type: Type;\n index: Expression;\n input: Expression;\n\n constructor(type: Type, index: Expression, input: Expression) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array(context.expectedType || ValueType));\n\n if (!index || !input) return null;\n\n const t: ArrayType = (input.type: any);\n return new At(t.itemType, index, input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const index = ((this.index.evaluate(ctx): any): number);\n const array = ((this.input.evaluate(ctx): any): Array<Value>);\n\n if (index < 0) {\n throw new RuntimeError(`Array index out of bounds: ${index} < 0.`);\n }\n\n if (index >= array.length) {\n throw new RuntimeError(`Array index out of bounds: ${index} > ${array.length - 1}.`);\n }\n\n if (index !== Math.floor(index)) {\n throw new RuntimeError(`Array index must be an integer, but found ${index} instead.`);\n }\n\n return array[index];\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.index);\n fn(this.input);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n return [\"at\", this.index.serialize(), this.input.serialize()];\n }\n}\n\nexport default At;\n","// @flow\n\nimport assert from 'assert';\n\nimport { typeOf } from '../values';\nimport { ValueType, type Type } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\n\n// Map input label values to output expression index\ntype Cases = {[number | string]: number};\n\nclass Match implements Expression {\n type: Type;\n inputType: Type;\n\n input: Expression;\n cases: Cases;\n outputs: Array<Expression>;\n otherwise: Expression;\n\n constructor(inputType: Type, outputType: Type, input: Expression, cases: Cases, outputs: Array<Expression>, otherwise: Expression) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);\n\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n\n cases[String(label)] = outputs.length;\n }\n\n const result = context.parse(value, i, outputType);\n if (!result) return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n\n const input = context.parse(args[1], 1, ValueType);\n if (!input) return null;\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(inputType && outputType);\n\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype((inputType: any), input.type)) {\n return null;\n }\n\n return new Match((inputType: any), (outputType: any), input, cases, outputs, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = (this.input.evaluate(ctx): any);\n const output = (typeOf(input) === this.inputType && this.outputs[this.cases[input]]) || this.otherwise;\n return output.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n\n possibleOutputs(): Array<Value | void> {\n return []\n .concat(...this.outputs.map((out) => out.possibleOutputs()))\n .concat(this.otherwise.possibleOutputs());\n }\n\n serialize(): Array<mixed> {\n const serialized = [\"match\", this.input.serialize()];\n\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput: Array<[number, Array<number | string>]> = [];\n const outputLookup: {[index: number]: number} = {}; // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([this.cases[label], [label]]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n\n const coerceLabel = (label) => this.inputType.kind === 'number' ? Number(label) : label;\n\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\n\nexport default Match;\n","// @flow\n\nimport assert from 'assert';\n\nimport { BooleanType } from '../types';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Value } from '../values';\nimport type { Type } from '../types';\n\ntype Branches = Array<[Expression, Expression]>;\n\nclass Case implements Expression {\n type: Type;\n\n branches: Branches;\n otherwise: Expression;\n\n constructor(type: Type, branches: Branches, otherwise: Expression) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n\n let outputType: ?Type;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test) return null;\n\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result) return null;\n\n branches.push([test, result]);\n\n outputType = outputType || result.type;\n }\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(outputType);\n return new Case((outputType: any), branches, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n\n eachChild(fn: (Expression) => void) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n\n possibleOutputs(): Array<Value | void> {\n return []\n .concat(...this.branches.map(([_, out]) => out.possibleOutputs()))\n .concat(this.otherwise.possibleOutputs());\n }\n\n serialize() {\n const serialized = [\"case\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Case;\n","// @flow\n\nimport { toString, ValueType, BooleanType, CollatorType } from '../types';\nimport Assertion from './assertion';\nimport { typeOf } from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type { Type } from '../types';\n\ntype ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>=' ;\n\nfunction isComparableType(op: ComparisonOperator, type: Type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' ||\n type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'null' ||\n type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'value';\n }\n}\n\n\nfunction eq(ctx, a, b) { return a === b; }\nfunction neq(ctx, a, b) { return a !== b; }\nfunction lt(ctx, a, b) { return a < b; }\nfunction gt(ctx, a, b) { return a > b; }\nfunction lteq(ctx, a, b) { return a <= b; }\nfunction gteq(ctx, a, b) { return a >= b; }\n\nfunction eqCollate(ctx, a, b, c) { return c.compare(a, b) === 0; }\nfunction neqCollate(ctx, a, b, c) { return !eqCollate(ctx, a, b, c); }\nfunction ltCollate(ctx, a, b, c) { return c.compare(a, b) < 0; }\nfunction gtCollate(ctx, a, b, c) { return c.compare(a, b) > 0; }\nfunction lteqCollate(ctx, a, b, c) { return c.compare(a, b) <= 0; }\nfunction gteqCollate(ctx, a, b, c) { return c.compare(a, b) >= 0; }\n\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op: ComparisonOperator, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n\n return class Comparison implements Expression {\n type: Type;\n lhs: Expression;\n rhs: Expression;\n collator: ?Expression;\n hasUntypedArgument: boolean;\n\n constructor(lhs: Expression, rhs: Expression, collator: ?Expression) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n\n static parse(args: Array<mixed>, context: ParsingContext): ?Expression {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n\n const op: ComparisonOperator = (args[0]: any);\n\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs) return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${op}\" comparisons are not supported for type '${toString(lhs.type)}'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs) return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${op}\" comparisons are not supported for type '${toString(rhs.type)}'.`);\n }\n\n if (\n lhs.type.kind !== rhs.type.kind &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`);\n }\n\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion(lhs.type, [rhs]);\n }\n }\n\n let collator = null;\n if (args.length === 4) {\n if (\n lhs.type.kind !== 'string' &&\n rhs.type.kind !== 'string' &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator) return null;\n }\n\n return new Comparison(lhs, rhs, collator);\n }\n\n evaluate(ctx: EvaluationContext) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError(`Expected arguments for \"${op}\" to be (string, string) or (number, number), but found (${lt.kind}, ${rt.kind}) instead.`);\n }\n }\n\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n\n return this.collator ?\n compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) :\n compareBasic(ctx, lhs, rhs);\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n\n possibleOutputs() {\n return [true, false];\n }\n\n serialize() {\n const serialized = [op];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n };\n}\n\nexport const Equals = makeComparison('==', eq, eqCollate);\nexport const NotEquals = makeComparison('!=', neq, neqCollate);\nexport const LessThan = makeComparison('<', lt, ltCollate);\nexport const GreaterThan = makeComparison('>', gt, gtCollate);\nexport const LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nexport const GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n","// @flow\n\nimport { NumberType, toString } from '../types';\n\nimport { typeOf } from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type { Expression } from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type { Type } from '../types';\n\nclass Length implements Expression {\n type: Type;\n input: Expression;\n\n constructor(input: Expression) {\n this.type = NumberType;\n this.input = input;\n }\n\n static parse(args: Array<mixed>, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${args.length - 1} instead.`);\n\n const input = context.parse(args[1], 1);\n if (!input) return null;\n\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`);\n\n return new Length(input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError(`Expected value to be of type string or array, but found ${toString(typeOf(input))} instead.`);\n }\n }\n\n eachChild(fn: (Expression) => void) {\n fn(this.input);\n }\n\n possibleOutputs() {\n return [undefined];\n }\n\n serialize() {\n const serialized = [\"length\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Length;\n","// @flow\n\nimport {\n type Type,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n ObjectType,\n ValueType,\n ErrorType,\n CollatorType,\n array,\n toString as typeToString\n} from '../types';\n\nimport { typeOf, Color, validateRGBA, toString as valueToString } from '../values';\nimport CompoundExpression from '../compound_expression';\nimport RuntimeError from '../runtime_error';\nimport Let from './let';\nimport Var from './var';\nimport Literal from './literal';\nimport Assertion from './assertion';\nimport Coercion from './coercion';\nimport At from './at';\nimport Match from './match';\nimport Case from './case';\nimport Step from './step';\nimport Interpolate from './interpolate';\nimport Coalesce from './coalesce';\nimport {\n Equals,\n NotEquals,\n LessThan,\n GreaterThan,\n LessThanOrEqual,\n GreaterThanOrEqual\n} from './comparison';\nimport CollatorExpression from './collator';\nimport FormatExpression from './format';\nimport Length from './length';\n\nimport type { Varargs } from '../compound_expression';\nimport type { ExpressionRegistry } from '../expression';\n\nconst expressions: ExpressionRegistry = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion,\n 'at': At,\n 'boolean': Assertion,\n 'case': Case,\n 'coalesce': Coalesce,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'interpolate': Interpolate,\n 'interpolate-hcl': Interpolate,\n 'interpolate-lab': Interpolate,\n 'length': Length,\n 'let': Let,\n 'literal': Literal,\n 'match': Match,\n 'number': Assertion,\n 'object': Assertion,\n 'step': Step,\n 'string': Assertion,\n 'to-boolean': Coercion,\n 'to-color': Coercion,\n 'to-number': Coercion,\n 'to-string': Coercion,\n 'var': Var\n};\n\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error) throw new RuntimeError(error);\n return new Color(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\n\nfunction has(key, obj) {\n return key in obj;\n}\n\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\n\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = (i + j) >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\n\nfunction varargs(type: Type): Varargs {\n return { type };\n}\n\nCompoundExpression.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => { throw new RuntimeError(v.evaluate(ctx)); }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => typeToString(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [NumberType, NumberType, NumberType],\n rgba\n ],\n 'rgba': [\n ColorType,\n [NumberType, NumberType, NumberType, NumberType],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n (ctx) => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n (ctx) => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n (ctx) => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n (ctx) => ctx.globals.zoom\n ],\n 'heatmap-density': [\n NumberType,\n [],\n (ctx) => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n (ctx) => ctx.globals.lineProgress || 0\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ], [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => ctx.properties()[(k: any).value] === (v: any).value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === (v: any).value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === (v: any).value\n ],\n 'filter-<': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => (k: any).value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n (ctx) => ctx.id() !== null\n ],\n 'filter-type-in': [\n BooleanType,\n [array(StringType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array(ValueType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is an array literal\n (ctx, [k, v]) => (v: any).value.indexOf(ctx.properties()[(k: any).value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[(k: any).value], (v: any).value, 0, (v: any).value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => valueToString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\n\nexport default expressions;\n","// @flow\n\n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nexport type Result<T, E> =\n | {| result: 'success', value: T |}\n | {| result: 'error', value: E |};\n\nexport function success<T, E>(value: T): Result<T, E> {\n return { result: 'success', value };\n}\n\nexport function error<T, E>(value: E): Result<T, E> {\n return { result: 'error', value };\n}\n","// @flow\n\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport function supportsPropertyExpression(spec: StylePropertySpecification): boolean {\n return spec['property-type'] === 'data-driven' || spec['property-type'] === 'cross-faded-data-driven';\n}\n\nexport function supportsZoomExpression(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\n\nexport function supportsInterpolation(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.interpolated;\n}\n","\nexport default function getType(val) {\n if (val instanceof Number) {\n return 'number';\n } else if (val instanceof String) {\n return 'string';\n } else if (val instanceof Boolean) {\n return 'boolean';\n } else if (Array.isArray(val)) {\n return 'array';\n } else if (val === null) {\n return 'null';\n } else {\n return typeof val;\n }\n}\n","\nimport * as colorSpaces from '../util/color_spaces';\nimport Color from '../util/color';\nimport extend from '../util/extend';\nimport getType from '../util/get_type';\nimport * as interpolate from '../util/interpolate';\nimport Interpolate from '../expression/definitions/interpolate';\nimport Formatted from '../expression/types/formatted';\nimport { supportsInterpolation } from '../util/properties';\n\nexport function isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction identityFunction(x) {\n return x;\n}\n\nexport function createFunction(parameters, propertySpec) {\n const isColor = propertySpec.type === 'color';\n const zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n const type = parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');\n\n if (isColor) {\n parameters = extend({}, parameters);\n\n if (parameters.stops) {\n parameters.stops = parameters.stops.map((stop) => {\n return [stop[0], Color.parse(stop[1])];\n });\n }\n\n if (parameters.default) {\n parameters.default = Color.parse(parameters.default);\n } else {\n parameters.default = Color.parse(propertySpec.default);\n }\n }\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb' && !colorSpaces[parameters.colorSpace]) { // eslint-disable-line import/namespace\n throw new Error(`Unknown color space: ${parameters.colorSpace}`);\n }\n\n let innerFun;\n let hashedStops;\n let categoricalKeyType;\n if (type === 'exponential') {\n innerFun = evaluateExponentialFunction;\n } else if (type === 'interval') {\n innerFun = evaluateIntervalFunction;\n } else if (type === 'categorical') {\n innerFun = evaluateCategoricalFunction;\n\n // For categorical functions, generate an Object as a hashmap of the stops for fast searching\n hashedStops = Object.create(null);\n for (const stop of parameters.stops) {\n hashedStops[stop[0]] = stop[1];\n }\n\n // Infer key type based on first stop key-- used to encforce strict type checking later\n categoricalKeyType = typeof parameters.stops[0][0];\n\n } else if (type === 'identity') {\n innerFun = evaluateIdentityFunction;\n } else {\n throw new Error(`Unknown function type \"${type}\"`);\n }\n\n if (zoomAndFeatureDependent) {\n const featureFunctions = {};\n const zoomStops = [];\n for (let s = 0; s < parameters.stops.length; s++) {\n const stop = parameters.stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctions[zoom] === undefined) {\n featureFunctions[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n stops: []\n };\n zoomStops.push(zoom);\n }\n featureFunctions[zoom].stops.push([stop[0].value, stop[1]]);\n }\n\n const featureFunctionStops = [];\n for (const z of zoomStops) {\n featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z], propertySpec)]);\n }\n\n return {\n kind: 'composite',\n interpolationFactor: Interpolate.interpolationFactor.bind(undefined, {name: 'linear'}),\n zoomStops: featureFunctionStops.map(s => s[0]),\n evaluate({zoom}, properties) {\n return evaluateExponentialFunction({\n stops: featureFunctionStops,\n base: parameters.base\n }, propertySpec, zoom).evaluate(zoom, properties);\n }\n };\n } else if (zoomDependent) {\n return {\n kind: 'camera',\n interpolationFactor: type === 'exponential' ?\n Interpolate.interpolationFactor.bind(undefined, {name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1}) :\n () => 0,\n zoomStops: parameters.stops.map(s => s[0]),\n evaluate: ({zoom}) => innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)\n };\n } else {\n return {\n kind: 'source',\n evaluate(_, feature) {\n const value = feature && feature.properties ? feature.properties[parameters.property] : undefined;\n if (value === undefined) {\n return coalesce(parameters.default, propertySpec.default);\n }\n return innerFun(parameters, propertySpec, value, hashedStops, categoricalKeyType);\n }\n };\n }\n}\n\nfunction coalesce(a, b, c) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n if (c !== undefined) return c;\n}\n\nfunction evaluateCategoricalFunction(parameters, propertySpec, input, hashedStops, keyType) {\n const evaluated = typeof input === keyType ? hashedStops[input] : undefined; // Enforce strict typing on input\n return coalesce(evaluated, parameters.default, propertySpec.default);\n}\n\nfunction evaluateIntervalFunction(parameters, propertySpec, input) {\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops, input);\n\n return parameters.stops[index][1];\n}\n\nfunction evaluateExponentialFunction(parameters, propertySpec, input) {\n const base = parameters.base !== undefined ? parameters.base : 1;\n\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops, input);\n const t = interpolationFactor(\n input, base,\n parameters.stops[index][0],\n parameters.stops[index + 1][0]);\n\n const outputLower = parameters.stops[index][1];\n const outputUpper = parameters.stops[index + 1][1];\n let interp = interpolate[propertySpec.type] || identityFunction; // eslint-disable-line import/namespace\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb') {\n const colorspace = colorSpaces[parameters.colorSpace]; // eslint-disable-line import/namespace\n interp = (a, b) => colorspace.reverse(colorspace.interpolate(colorspace.forward(a), colorspace.forward(b), t));\n }\n\n if (typeof outputLower.evaluate === 'function') {\n return {\n evaluate(...args) {\n const evaluatedLower = outputLower.evaluate.apply(undefined, args);\n const evaluatedUpper = outputUpper.evaluate.apply(undefined, args);\n // Special case for fill-outline-color, which has no spec default.\n if (evaluatedLower === undefined || evaluatedUpper === undefined) {\n return undefined;\n }\n return interp(evaluatedLower, evaluatedUpper, t);\n }\n };\n }\n\n return interp(outputLower, outputUpper, t);\n}\n\nfunction evaluateIdentityFunction(parameters, propertySpec, input) {\n if (propertySpec.type === 'color') {\n input = Color.parse(input);\n } else if (propertySpec.type === 'formatted') {\n input = Formatted.fromString(input.toString());\n } else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) {\n input = undefined;\n }\n return coalesce(input, parameters.default, propertySpec.default);\n}\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n *\n * @private\n */\nfunction findStopLessThanOrEqualTo(stops, input) {\n const n = stops.length;\n let lowerIndex = 0;\n let upperIndex = n - 1;\n let currentIndex = 0;\n let currentValue, upperValue;\n\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex][0];\n upperValue = stops[currentIndex + 1][0];\n if (input === currentValue || input > currentValue && input < upperValue) { // Search complete\n return currentIndex;\n } else if (currentValue < input) {\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n }\n }\n\n return Math.max(currentIndex - 1, 0);\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n *\n * How it works:\n * Two consecutive stop values define a (scaled and shifted) exponential\n * function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n */\nfunction interpolationFactor(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport extend from '../util/extend';\nimport ParsingError from './parsing_error';\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport Step from './definitions/step';\nimport Interpolate from './definitions/interpolate';\nimport Coalesce from './definitions/coalesce';\nimport Let from './definitions/let';\nimport definitions from './definitions';\nimport * as isConstant from './is_constant';\nimport RuntimeError from './runtime_error';\nimport { success, error } from '../util/result';\nimport { supportsPropertyExpression, supportsZoomExpression, supportsInterpolation } from '../util/properties';\n\nimport type {Type, EvaluationKind} from './types';\nimport type {Value} from './values';\nimport type {Expression} from './expression';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {Result} from '../util/result';\nimport type {InterpolationType} from './definitions/interpolate';\nimport type {PropertyValueSpecification} from '../types';\n\nexport type Feature = {\n +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon',\n +id?: any,\n +properties: {[string]: any},\n +patterns?: {[string]: {\"min\": string, \"mid\": string, \"max\": string}}\n};\n\nexport type FeatureState = {[string]: any};\n\nexport type GlobalProperties = $ReadOnly<{\n zoom: number,\n heatmapDensity?: number,\n lineProgress?: number,\n isSupportedScript?: (string) => boolean\n}>;\n\nexport class StyleExpression {\n expression: Expression;\n\n _evaluator: EvaluationContext;\n _defaultValue: Value;\n _warningHistory: {[key: string]: boolean};\n _enumValues: ?{[string]: any};\n\n constructor(expression: Expression, propertySpec: StylePropertySpecification) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext();\n this._defaultValue = getDefaultValue(propertySpec);\n this._enumValues = propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n\n return this.expression.evaluate(this._evaluator);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n\n try {\n const val = this.expression.evaluate(this._evaluator);\n if (val === null || val === undefined) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError(`Expected value to be one of ${Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ')}, but found ${JSON.stringify(val)} instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\n\nexport function isExpression(expression: mixed) {\n return Array.isArray(expression) && expression.length > 0 &&\n typeof expression[0] === 'string' && expression[0] in definitions;\n}\n\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nexport function createExpression(expression: mixed, propertySpec: StylePropertySpecification): Result<StyleExpression, Array<ParsingError>> {\n const parser = new ParsingContext(definitions, [], getExpectedType(propertySpec));\n\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined,\n propertySpec.type === 'string' ? {typeAnnotation: 'coerce'} : undefined);\n\n if (!parsed) {\n assert(parser.errors.length > 0);\n return error(parser.errors);\n }\n\n return success(new StyleExpression(parsed, propertySpec));\n}\n\nexport class ZoomConstantExpression<Kind: EvaluationKind> {\n kind: Kind;\n isStateDependent: boolean;\n _styleExpression: StyleExpression;\n\n constructor(kind: Kind, expression: StyleExpression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== ('constant': EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluate(globals, feature, featureState);\n }\n}\n\nexport class ZoomDependentExpression<Kind: EvaluationKind> {\n kind: Kind;\n zoomStops: Array<number>;\n isStateDependent: boolean;\n\n _styleExpression: StyleExpression;\n _interpolationType: ?InterpolationType;\n\n constructor(kind: Kind, expression: StyleExpression, zoomCurve: Step | Interpolate) {\n this.kind = kind;\n this.zoomStops = zoomCurve.labels;\n this._styleExpression = expression;\n this.isStateDependent = kind !== ('camera': EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n if (zoomCurve instanceof Interpolate) {\n this._interpolationType = zoomCurve.interpolation;\n }\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any {\n return this._styleExpression.evaluate(globals, feature, featureState);\n }\n\n interpolationFactor(input: number, lower: number, upper: number): number {\n if (this._interpolationType) {\n return Interpolate.interpolationFactor(this._interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\n\nexport type ConstantExpression = {\n kind: 'constant',\n +evaluate: (globals: GlobalProperties, feature?: Feature) => any,\n}\n\nexport type SourceExpression = {\n kind: 'source',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n};\n\nexport type CameraExpression = {\n kind: 'camera',\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array<number>\n};\n\nexport type CompositeExpression = {\n kind: 'composite',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array<number>\n};\n\nexport type StylePropertyExpression =\n | ConstantExpression\n | SourceExpression\n | CameraExpression\n | CompositeExpression;\n\nexport function createPropertyExpression(expression: mixed, propertySpec: StylePropertySpecification): Result<StylePropertyExpression, Array<ParsingError>> {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n\n const parsed = expression.value.expression;\n\n const isFeatureConstant = isConstant.isFeatureConstant(parsed);\n if (!isFeatureConstant && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError('', 'data expressions not supported')]);\n }\n\n const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom']);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError('', 'zoom expressions not supported')]);\n }\n\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n\n if (!zoomCurve) {\n return success(isFeatureConstant ?\n (new ZoomConstantExpression('constant', expression.value): ConstantExpression) :\n (new ZoomConstantExpression('source', expression.value): SourceExpression));\n }\n\n return success(isFeatureConstant ?\n (new ZoomDependentExpression('camera', expression.value, zoomCurve): CameraExpression) :\n (new ZoomDependentExpression('composite', expression.value, zoomCurve): CompositeExpression));\n}\n\nimport { isFunction, createFunction } from '../function';\nimport { Color } from './values';\n\n// serialization wrapper for old-style stop functions normalized to the\n// expression interface\nexport class StylePropertyFunction<T> {\n _parameters: PropertyValueSpecification<T>;\n _specification: StylePropertySpecification;\n\n kind: EvaluationKind;\n evaluate: (globals: GlobalProperties, feature?: Feature) => any;\n interpolationFactor: ?(input: number, lower: number, upper: number) => number;\n zoomStops: ?Array<number>;\n\n constructor(parameters: PropertyValueSpecification<T>, specification: StylePropertySpecification) {\n this._parameters = parameters;\n this._specification = specification;\n extend(this, createFunction(this._parameters, this._specification));\n }\n\n static deserialize(serialized: {_parameters: PropertyValueSpecification<T>, _specification: StylePropertySpecification}) {\n return ((new StylePropertyFunction(serialized._parameters, serialized._specification)): StylePropertyFunction<T>);\n }\n\n static serialize(input: StylePropertyFunction<T>) {\n return {\n _parameters: input._parameters,\n _specification: input._specification\n };\n }\n}\n\nexport function normalizePropertyExpression<T>(value: PropertyValueSpecification<T>, specification: StylePropertySpecification): StylePropertyExpression {\n if (isFunction(value)) {\n return (new StylePropertyFunction(value, specification): any);\n\n } else if (isExpression(value)) {\n const expression = createPropertyExpression(value, specification);\n if (expression.result === 'error') {\n // this should have been caught in validation\n throw new Error(expression.value.map(err => `${err.key}: ${err.message}`).join(', '));\n }\n return expression.value;\n\n } else {\n let constant: any = value;\n if (typeof value === 'string' && specification.type === 'color') {\n constant = Color.parse(value);\n }\n return {\n kind: 'constant',\n evaluate: () => constant\n };\n }\n}\n\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression: Expression): Step | Interpolate | ParsingError | null {\n let result = null;\n if (expression instanceof Let) {\n result = findZoomCurve(expression.result);\n\n } else if (expression instanceof Coalesce) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n\n } else if ((expression instanceof Step || expression instanceof Interpolate) &&\n expression.input instanceof CompoundExpression &&\n expression.input.name === 'zoom') {\n\n result = expression;\n }\n\n if (result instanceof ParsingError) {\n return result;\n }\n\n expression.eachChild((child) => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n\n return result;\n}\n\nimport { ColorType, StringType, NumberType, BooleanType, ValueType, FormattedType, array } from './types';\n\nfunction getExpectedType(spec: StylePropertySpecification): Type {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType\n };\n\n if (spec.type === 'array') {\n return array(types[spec.value] || ValueType, spec.length);\n }\n\n return types[spec.type];\n}\n\nfunction getDefaultValue(spec: StylePropertySpecification): Value {\n if (spec.type === 'color' && isFunction(spec.default)) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n","// @flow\n\nimport assert from 'assert';\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport default convertFunction;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? ['literal', value] : value;\n}\n\nfunction convertFunction(parameters: any, propertySpec: StylePropertySpecification) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n\n stops = stops.map((stop) => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [stop[0], convertTokenString(stop[1])];\n }\n return [stop[0], convertLiteral(stop[1])];\n });\n\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\n\nfunction convertIdentityFunction(parameters, propertySpec): Array<mixed> {\n const get = ['get', parameters.property];\n\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? ['string', get] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [propertySpec.type === 'color' ? 'to-color' : propertySpec.type, get, convertLiteral(parameters.default)];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\n\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl': return 'interpolate-hcl';\n case 'lab': return 'interpolate-lab';\n default: return 'interpolate';\n }\n}\n\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([stop[0].value, stop[1]]);\n }\n\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [getInterpolateOperator(parameters), ['linear'], ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n\n return expression;\n } else {\n const expression = ['step', ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n }\n}\n\nfunction coalesce(a, b) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n}\n\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = ['get', parameters.property];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n assert(parameters.stops.length > 0 && parameters.stops.length <= 2);\n const expression = ['case'];\n for (const stop of stops) {\n expression.push(['==', get, stop[0]], stop[1]);\n }\n expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));\n return expression;\n } else if (type === 'categorical') {\n const expression = ['match', get];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(convertLiteral(coalesce(parameters.default, propertySpec.default)));\n return expression;\n } else if (type === 'interval') {\n const expression = ['step', ['number', get]];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [getInterpolateOperator(parameters), ['exponential', base], ['number', get]];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${type}`);\n }\n}\n\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = ['step', input];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [getInterpolateOperator(parameters), ['exponential', base], input];\n } else {\n throw new Error(`Unknown zoom function type \"${type}\"`);\n }\n\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n}\n\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\n\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\n\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n assert(propertySpec.expression);\n return (propertySpec.expression: any).interpolated ? 'exponential' : 'interval';\n }\n}\n\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nexport function convertTokenString(s: string) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0) result.push(literal);\n result.push(['get', match[1]]);\n }\n\n if (result.length === 1) {\n return s;\n }\n\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return ['to-string', result[1]];\n }\n\n return result;\n}\n\n","// @flow\n\nimport { createExpression } from '../expression';\n\nimport type {GlobalProperties} from '../expression';\nexport type FeatureFilter = (globalProperties: GlobalProperties, feature: VectorTileFeature) => boolean;\n\nexport default createFilter;\nexport { isExpressionFilter };\n\nfunction isExpressionFilter(filter: any) {\n if (filter === true || filter === false) {\n return true;\n }\n\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n\n case 'in':\n case '!in':\n case '!has':\n case 'none':\n return false;\n\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n\n default:\n return true;\n }\n}\n\nconst filterSpec = {\n 'type': 'boolean',\n 'default': false,\n 'transition': false,\n 'property-type': 'data-driven',\n 'expression': {\n 'interpolated': false,\n 'parameters': ['zoom', 'feature']\n }\n};\n\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter: any): FeatureFilter {\n if (filter === null || filter === undefined) {\n return () => true;\n }\n\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n\n const compiled = createExpression(filter, filterSpec);\n if (compiled.result === 'error') {\n throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', '));\n } else {\n return (globalProperties: GlobalProperties, feature: VectorTileFeature) => compiled.value.evaluate(globalProperties, feature);\n }\n}\n\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction convertFilter(filter: ?Array<any>): mixed {\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n const converted =\n op === '==' ? convertComparisonOp(filter[1], filter[2], '==') :\n op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) :\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>=' ? convertComparisonOp(filter[1], filter[2], op) :\n op === 'any' ? convertDisjunctionOp(filter.slice(1)) :\n op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) :\n op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) :\n op === 'in' ? convertInOp(filter[1], filter.slice(2)) :\n op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) :\n op === 'has' ? convertHasOp(filter[1]) :\n op === '!has' ? convertNegation(convertHasOp(filter[1])) :\n true;\n return converted;\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string) {\n switch (property) {\n case '$type':\n return [`filter-type-${op}`, value];\n case '$id':\n return [`filter-id-${op}`, value];\n default:\n return [`filter-${op}`, property, value];\n }\n}\n\nfunction convertDisjunctionOp(filters: Array<Array<any>>) {\n return ['any'].concat(filters.map(convertFilter));\n}\n\nfunction convertInOp(property: string, values: Array<any>) {\n if (values.length === 0) { return false; }\n switch (property) {\n case '$type':\n return [`filter-type-in`, ['literal', values]];\n case '$id':\n return [`filter-id-in`, ['literal', values]];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return ['filter-in-large', property, ['literal', values.sort(compare)]];\n } else {\n return ['filter-in-small', property, ['literal', values]];\n }\n }\n}\n\nfunction convertHasOp(property: string) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [`filter-has`, property];\n }\n}\n\nfunction convertNegation(filter: mixed) {\n return ['!', filter];\n}\n","// @flow\n\nimport { isExpressionFilter } from './index';\n\nimport type { FilterSpecification } from '../types';\n\ntype ExpectedTypes = {[string]: 'string' | 'number' | 'boolean'};\n\n/**\n * Convert the given legacy filter to (the JSON representation of) an\n * equivalent expression\n * @private\n */\nexport default function convertFilter(filter: FilterSpecification): mixed {\n return _convertFilter(filter, {});\n}\n\n/*\n * Convert the given filter to an expression, storing the expected types for\n * any feature properties referenced in expectedTypes.\n *\n * These expected types are needed in order to construct preflight type checks\n * needed for handling 'any' filters. A preflight type check is necessary in\n * order to mimic legacy filters' semantics around expected type mismatches.\n * For example, consider the legacy filter:\n *\n * [\"any\", [\"all\", [\">\", \"y\", 0], [\">\", \"y\", 0]], [\">\", \"x\", 0]]\n *\n * Naively, we might convert this to the expression:\n *\n * [\"any\", [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]], [\">\", [\"get\", \"x\"], 0]]\n *\n * But if we tried to evaluate this against, say `{x: 1, y: null, z: 0}`, the\n * [\">\", [\"get\", \"y\"], 0] would cause an evaluation error, leading to the\n * entire filter returning false. Legacy filter semantics, though, ask for\n * [\">\", \"y\", 0] to simply return `false` when `y` is of the wrong type,\n * allowing the subsequent terms of the outer \"any\" expression to be evaluated\n * (resulting, in this case, in a `true` value, because x > 0).\n *\n * We account for this by inserting a preflight type-checking expression before\n * each \"any\" term, allowing us to avoid evaluating the actual converted filter\n * if any type mismatches would cause it to produce an evalaution error:\n *\n * [\"any\",\n * [\"case\",\n * [\"all\", [\"==\", [\"typeof\", [\"get\", \"y\"]], \"number\"], [\"==\", [\"typeof\", [\"get\", \"z\"], \"number]],\n * [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]],\n * false\n * ],\n * [\"case\",\n * [\"==\", [\"typeof\", [\"get\", \"x\"], \"number\"]],\n * [\">\", [\"get\", \"x\"], 0],\n * false\n * ]\n * ]\n *\n * An alternative, possibly more direct approach would be to use type checks\n * in the conversion of each comparison operator, so that the converted version\n * of each individual ==, >=, etc. would mimic the legacy filter semantics. The\n * downside of this approach is that it can lead to many more type checks than\n * would otherwise be necessary: outside the context of an \"any\" expression,\n * bailing out due to a runtime type error (expression semantics) and returning\n * false (legacy filter semantics) are equivalent: they cause the filter to\n * produce a `false` result.\n */\nfunction _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): mixed {\n if (isExpressionFilter(filter)) { return filter; }\n\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n\n let converted;\n\n if (\n op === '==' ||\n op === '!=' ||\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>='\n ) {\n const [, property, value] = (filter: any);\n converted = convertComparisonOp(property, value, op, expectedTypes);\n } else if (op === 'any') {\n const children = (filter: any).slice(1).map(f => {\n const types = {};\n const child = _convertFilter(f, types);\n const typechecks = runtimeTypeChecks(types);\n return typechecks === true ? child : ['case', typechecks, child, false];\n });\n return ['any'].concat(children);\n } else if (op === 'all') {\n const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes));\n return children.length > 1 ? ['all'].concat(children) : [].concat(...children);\n } else if (op === 'none') {\n return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})];\n } else if (op === 'in') {\n converted = convertInOp((filter[1]: any), filter.slice(2));\n } else if (op === '!in') {\n converted = convertInOp((filter[1]: any), filter.slice(2), true);\n } else if (op === 'has') {\n converted = convertHasOp((filter[1]: any));\n } else if (op === '!has') {\n converted = ['!', convertHasOp((filter[1]: any))];\n } else {\n converted = true;\n }\n\n return converted;\n}\n\n// Given a set of feature properties and an expected type for each one,\n// construct an boolean expression that tests whether each property has the\n// right type.\n// E.g.: for {name: 'string', population: 'number'}, return\n// [ 'all',\n// ['==', ['typeof', ['get', 'name'], 'string']],\n// ['==', ['typeof', ['get', 'population'], 'number]]\n// ]\nfunction runtimeTypeChecks(expectedTypes: ExpectedTypes) {\n const conditions = [];\n for (const property in expectedTypes) {\n const get = property === '$id' ? ['id'] : ['get', property];\n conditions.push(['==', ['typeof', get], expectedTypes[property]]);\n }\n if (conditions.length === 0) return true;\n if (conditions.length === 1) return conditions[0];\n return ['all'].concat(conditions);\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string, expectedTypes: ?ExpectedTypes) {\n let get;\n if (property === '$type') {\n return [op, ['geometry-type'], value];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n if (expectedTypes && value !== null) {\n const type = ((typeof value): any);\n expectedTypes[property] = type;\n }\n\n if (op === '==' && property !== '$id' && value === null) {\n return [\n 'all',\n ['has', property], // missing property != null for legacy filters\n ['==', get, null]\n ];\n } else if (op === '!=' && property !== '$id' && value === null) {\n return [\n 'any',\n ['!', ['has', property]], // missing property != null for legacy filters\n ['!=', get, null]\n ];\n }\n\n return [op, get, value];\n}\n\nfunction convertInOp(property: string, values: Array<any>, negate = false) {\n if (values.length === 0) return negate;\n\n let get;\n if (property === '$type') {\n get = ['geometry-type'];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n // Determine if the list of values to be searched is homogenously typed.\n // If so (and if the type is string or number), then we can use a\n // [match, input, [...values], true, false] construction rather than a\n // bunch of `==` tests.\n let uniformTypes = true;\n const type = typeof values[0];\n for (const value of values) {\n if (typeof value !== type) {\n uniformTypes = false;\n break;\n }\n }\n\n if (uniformTypes && (type === 'string' || type === 'number')) {\n return ['match', get, values, !negate, negate];\n }\n\n return [ negate ? 'all' : 'any' ].concat(\n values.map(v => [negate ? '!=' : '==', get, v])\n );\n}\n\nfunction convertHasOp(property: string) {\n if (property === '$type') {\n return true;\n } else if (property === '$id') {\n return ['!=', ['id'], null];\n } else {\n return ['has', property];\n }\n}\n","// @flow\n\n/**\n * Deeply compares two object literals.\n *\n * @private\n */\nfunction deepEqual(a: ?mixed, b: ?mixed): boolean {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n if (typeof a === 'object' && a !== null && b !== null) {\n if (!(typeof b === 'object')) return false;\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n for (const key in a) {\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return a === b;\n}\n\nexport default deepEqual;\n","\nimport isEqual from './util/deep_equal';\n\nconst operations = {\n\n /*\n * { command: 'setStyle', args: [stylesheet] }\n */\n setStyle: 'setStyle',\n\n /*\n * { command: 'addLayer', args: [layer, 'beforeLayerId'] }\n */\n addLayer: 'addLayer',\n\n /*\n * { command: 'removeLayer', args: ['layerId'] }\n */\n removeLayer: 'removeLayer',\n\n /*\n * { command: 'setPaintProperty', args: ['layerId', 'prop', value] }\n */\n setPaintProperty: 'setPaintProperty',\n\n /*\n * { command: 'setLayoutProperty', args: ['layerId', 'prop', value] }\n */\n setLayoutProperty: 'setLayoutProperty',\n\n /*\n * { command: 'setFilter', args: ['layerId', filter] }\n */\n setFilter: 'setFilter',\n\n /*\n * { command: 'addSource', args: ['sourceId', source] }\n */\n addSource: 'addSource',\n\n /*\n * { command: 'removeSource', args: ['sourceId'] }\n */\n removeSource: 'removeSource',\n\n /*\n * { command: 'setGeoJSONSourceData', args: ['sourceId', data] }\n */\n setGeoJSONSourceData: 'setGeoJSONSourceData',\n\n /*\n * { command: 'setLayerZoomRange', args: ['layerId', 0, 22] }\n */\n setLayerZoomRange: 'setLayerZoomRange',\n\n /*\n * { command: 'setLayerProperty', args: ['layerId', 'prop', value] }\n */\n setLayerProperty: 'setLayerProperty',\n\n /*\n * { command: 'setCenter', args: [[lon, lat]] }\n */\n setCenter: 'setCenter',\n\n /*\n * { command: 'setZoom', args: [zoom] }\n */\n setZoom: 'setZoom',\n\n /*\n * { command: 'setBearing', args: [bearing] }\n */\n setBearing: 'setBearing',\n\n /*\n * { command: 'setPitch', args: [pitch] }\n */\n setPitch: 'setPitch',\n\n /*\n * { command: 'setSprite', args: ['spriteUrl'] }\n */\n setSprite: 'setSprite',\n\n /*\n * { command: 'setGlyphs', args: ['glyphsUrl'] }\n */\n setGlyphs: 'setGlyphs',\n\n /*\n * { command: 'setTransition', args: [transition] }\n */\n setTransition: 'setTransition',\n\n /*\n * { command: 'setLighting', args: [lightProperties] }\n */\n setLight: 'setLight'\n\n};\n\nfunction addSource(sourceId, after, commands) {\n commands.push({ command: operations.addSource, args: [sourceId, after[sourceId]] });\n}\n\nfunction removeSource(sourceId, commands, sourcesRemoved) {\n commands.push({ command: operations.removeSource, args: [sourceId] });\n sourcesRemoved[sourceId] = true;\n}\n\nfunction updateSource(sourceId, after, commands, sourcesRemoved) {\n removeSource(sourceId, commands, sourcesRemoved);\n addSource(sourceId, after, commands);\n}\n\nfunction canUpdateGeoJSON(before, after, sourceId) {\n let prop;\n for (prop in before[sourceId]) {\n if (!before[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n for (prop in after[sourceId]) {\n if (!after[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n return true;\n}\n\nfunction diffSources(before, after, commands, sourcesRemoved) {\n before = before || {};\n after = after || {};\n\n let sourceId;\n\n // look for sources to remove\n for (sourceId in before) {\n if (!before.hasOwnProperty(sourceId)) continue;\n if (!after.hasOwnProperty(sourceId)) {\n removeSource(sourceId, commands, sourcesRemoved);\n }\n }\n\n // look for sources to add/update\n for (sourceId in after) {\n if (!after.hasOwnProperty(sourceId)) continue;\n if (!before.hasOwnProperty(sourceId)) {\n addSource(sourceId, after, commands);\n } else if (!isEqual(before[sourceId], after[sourceId])) {\n if (before[sourceId].type === 'geojson' && after[sourceId].type === 'geojson' && canUpdateGeoJSON(before, after, sourceId)) {\n commands.push({ command: operations.setGeoJSONSourceData, args: [sourceId, after[sourceId].data] });\n } else {\n // no update command, must remove then add\n updateSource(sourceId, after, commands, sourcesRemoved);\n }\n }\n }\n}\n\nfunction diffLayerPropertyChanges(before, after, commands, layerId, klass, command) {\n before = before || {};\n after = after || {};\n\n let prop;\n\n for (prop in before) {\n if (!before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({ command, args: [layerId, prop, after[prop], klass] });\n }\n }\n for (prop in after) {\n if (!after.hasOwnProperty(prop) || before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({ command, args: [layerId, prop, after[prop], klass] });\n }\n }\n}\n\nfunction pluckId(layer) {\n return layer.id;\n}\nfunction indexById(group, layer) {\n group[layer.id] = layer;\n return group;\n}\n\nfunction diffLayers(before, after, commands) {\n before = before || [];\n after = after || [];\n\n // order of layers by id\n const beforeOrder = before.map(pluckId);\n const afterOrder = after.map(pluckId);\n\n // index of layer by id\n const beforeIndex = before.reduce(indexById, {});\n const afterIndex = after.reduce(indexById, {});\n\n // track order of layers as if they have been mutated\n const tracker = beforeOrder.slice();\n\n // layers that have been added do not need to be diffed\n const clean = Object.create(null);\n\n let i, d, layerId, beforeLayer, afterLayer, insertBeforeLayerId, prop;\n\n // remove layers\n for (i = 0, d = 0; i < beforeOrder.length; i++) {\n layerId = beforeOrder[i];\n if (!afterIndex.hasOwnProperty(layerId)) {\n commands.push({ command: operations.removeLayer, args: [layerId] });\n tracker.splice(tracker.indexOf(layerId, d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n }\n\n // add/reorder layers\n for (i = 0, d = 0; i < afterOrder.length; i++) {\n // work backwards as insert is before an existing layer\n layerId = afterOrder[afterOrder.length - 1 - i];\n\n if (tracker[tracker.length - 1 - i] === layerId) continue;\n\n if (beforeIndex.hasOwnProperty(layerId)) {\n // remove the layer before we insert at the correct position\n commands.push({ command: operations.removeLayer, args: [layerId] });\n tracker.splice(tracker.lastIndexOf(layerId, tracker.length - d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n\n // add layer at correct position\n insertBeforeLayerId = tracker[tracker.length - i];\n commands.push({ command: operations.addLayer, args: [afterIndex[layerId], insertBeforeLayerId] });\n tracker.splice(tracker.length - i, 0, layerId);\n clean[layerId] = true;\n }\n\n // update layers\n for (i = 0; i < afterOrder.length; i++) {\n layerId = afterOrder[i];\n beforeLayer = beforeIndex[layerId];\n afterLayer = afterIndex[layerId];\n\n // no need to update if previously added (new or moved)\n if (clean[layerId] || isEqual(beforeLayer, afterLayer)) continue;\n\n // If source, source-layer, or type have changes, then remove the layer\n // and add it back 'from scratch'.\n if (!isEqual(beforeLayer.source, afterLayer.source) || !isEqual(beforeLayer['source-layer'], afterLayer['source-layer']) || !isEqual(beforeLayer.type, afterLayer.type)) {\n commands.push({ command: operations.removeLayer, args: [layerId] });\n // we add the layer back at the same position it was already in, so\n // there's no need to update the `tracker`\n insertBeforeLayerId = tracker[tracker.lastIndexOf(layerId) + 1];\n commands.push({ command: operations.addLayer, args: [afterLayer, insertBeforeLayerId] });\n continue;\n }\n\n // layout, paint, filter, minzoom, maxzoom\n diffLayerPropertyChanges(beforeLayer.layout, afterLayer.layout, commands, layerId, null, operations.setLayoutProperty);\n diffLayerPropertyChanges(beforeLayer.paint, afterLayer.paint, commands, layerId, null, operations.setPaintProperty);\n if (!isEqual(beforeLayer.filter, afterLayer.filter)) {\n commands.push({ command: operations.setFilter, args: [layerId, afterLayer.filter] });\n }\n if (!isEqual(beforeLayer.minzoom, afterLayer.minzoom) || !isEqual(beforeLayer.maxzoom, afterLayer.maxzoom)) {\n commands.push({ command: operations.setLayerZoomRange, args: [layerId, afterLayer.minzoom, afterLayer.maxzoom] });\n }\n\n // handle all other layer props, including paint.*\n for (prop in beforeLayer) {\n if (!beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({ command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]] });\n }\n }\n for (prop in afterLayer) {\n if (!afterLayer.hasOwnProperty(prop) || beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({ command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]] });\n }\n }\n }\n}\n\n/**\n * Diff two stylesheet\n *\n * Creates semanticly aware diffs that can easily be applied at runtime.\n * Operations produced by the diff closely resemble the mapbox-gl-js API. Any\n * error creating the diff will fall back to the 'setStyle' operation.\n *\n * Example diff:\n * [\n * { command: 'setConstant', args: ['@water', '#0000FF'] },\n * { command: 'setPaintProperty', args: ['background', 'background-color', 'black'] }\n * ]\n *\n * @private\n * @param {*} [before] stylesheet to compare from\n * @param {*} after stylesheet to compare to\n * @returns Array list of changes\n */\nfunction diffStyles(before, after) {\n if (!before) return [{ command: operations.setStyle, args: [after] }];\n\n let commands = [];\n\n try {\n // Handle changes to top-level properties\n if (!isEqual(before.version, after.version)) {\n return [{ command: operations.setStyle, args: [after] }];\n }\n if (!isEqual(before.center, after.center)) {\n commands.push({ command: operations.setCenter, args: [after.center] });\n }\n if (!isEqual(before.zoom, after.zoom)) {\n commands.push({ command: operations.setZoom, args: [after.zoom] });\n }\n if (!isEqual(before.bearing, after.bearing)) {\n commands.push({ command: operations.setBearing, args: [after.bearing] });\n }\n if (!isEqual(before.pitch, after.pitch)) {\n commands.push({ command: operations.setPitch, args: [after.pitch] });\n }\n if (!isEqual(before.sprite, after.sprite)) {\n commands.push({ command: operations.setSprite, args: [after.sprite] });\n }\n if (!isEqual(before.glyphs, after.glyphs)) {\n commands.push({ command: operations.setGlyphs, args: [after.glyphs] });\n }\n if (!isEqual(before.transition, after.transition)) {\n commands.push({ command: operations.setTransition, args: [after.transition] });\n }\n if (!isEqual(before.light, after.light)) {\n commands.push({ command: operations.setLight, args: [after.light] });\n }\n\n // Handle changes to `sources`\n // If a source is to be removed, we also--before the removeSource\n // command--need to remove all the style layers that depend on it.\n const sourcesRemoved = {};\n\n // First collect the {add,remove}Source commands\n const removeOrAddSourceCommands = [];\n diffSources(before.sources, after.sources, removeOrAddSourceCommands, sourcesRemoved);\n\n // Push a removeLayer command for each style layer that depends on a\n // source that's being removed.\n // Also, exclude any such layers them from the input to `diffLayers`\n // below, so that diffLayers produces the appropriate `addLayers`\n // command\n const beforeLayers = [];\n if (before.layers) {\n before.layers.forEach((layer) => {\n if (sourcesRemoved[layer.source]) {\n commands.push({ command: operations.removeLayer, args: [layer.id] });\n } else {\n beforeLayers.push(layer);\n }\n });\n }\n commands = commands.concat(removeOrAddSourceCommands);\n\n // Handle changes to `layers`\n diffLayers(beforeLayers, after.layers, commands);\n\n } catch (e) {\n // fall back to setStyle\n console.warn('Unable to compute style diff:', e);\n commands = [{ command: operations.setStyle, args: [after] }];\n }\n\n return commands;\n}\n\nexport default diffStyles;\nexport { operations };\n","\nexport default class ValidationError {\n constructor(key, value, message, identifier) {\n this.message = (key ? `${key}: ` : '') + message;\n if (identifier) this.identifier = identifier;\n\n if (value !== null && value !== undefined && value.__line__) {\n this.line = value.__line__;\n }\n }\n}\n","\nfunction ParsingError(error) {\n this.error = error;\n this.message = error.message;\n const match = error.message.match(/line (\\d+)/);\n this.line = match ? parseInt(match[1], 10) : 0;\n}\n\nexport default ParsingError;\n","\nimport ValidationError from '../error/validation_error';\n\nexport default function validateConstants(options) {\n const key = options.key;\n const constants = options.value;\n\n if (constants) {\n return [new ValidationError(key, constants, 'constants have been deprecated as of v8')];\n } else {\n return [];\n }\n}\n","\n// Turn jsonlint-lines-primitives objects into primitive objects\nexport function unbundle(value) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\n\nexport function deepUnbundle(value) {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n }\n return unbundle(value);\n}\n\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validateSpec from './validate';\n\nexport default function validateObject(options) {\n const key = options.key;\n const object = options.value;\n const elementSpecs = options.valueSpec || {};\n const elementValidators = options.objectElementValidators || {};\n const style = options.style;\n const styleSpec = options.styleSpec;\n let errors = [];\n\n const type = getType(object);\n if (type !== 'object') {\n return [new ValidationError(key, object, `object expected, ${type} found`)];\n }\n\n for (const objectKey in object) {\n const elementSpecKey = objectKey.split('.')[0]; // treat 'paint.*' as 'paint'\n const elementSpec = elementSpecs[elementSpecKey] || elementSpecs['*'];\n\n let validateElement;\n if (elementValidators[elementSpecKey]) {\n validateElement = elementValidators[elementSpecKey];\n } else if (elementSpecs[elementSpecKey]) {\n validateElement = validateSpec;\n } else if (elementValidators['*']) {\n validateElement = elementValidators['*'];\n } else if (elementSpecs['*']) {\n validateElement = validateSpec;\n } else {\n errors.push(new ValidationError(key, object[objectKey], `unknown property \"${objectKey}\"`));\n continue;\n }\n\n errors = errors.concat(validateElement({\n key: (key ? `${key}.` : key) + objectKey,\n value: object[objectKey],\n valueSpec: elementSpec,\n style,\n styleSpec,\n object,\n objectKey\n }, object));\n }\n\n for (const elementSpecKey in elementSpecs) {\n // Don't check `required` when there's a custom validator for that property.\n if (elementValidators[elementSpecKey]) {\n continue;\n }\n\n if (elementSpecs[elementSpecKey].required && elementSpecs[elementSpecKey]['default'] === undefined && object[elementSpecKey] === undefined) {\n errors.push(new ValidationError(key, object, `missing required property \"${elementSpecKey}\"`));\n }\n }\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateArray(options) {\n const array = options.value;\n const arraySpec = options.valueSpec;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const key = options.key;\n const validateArrayElement = options.arrayElementValidator || validate;\n\n if (getType(array) !== 'array') {\n return [new ValidationError(key, array, `array expected, ${getType(array)} found`)];\n }\n\n if (arraySpec.length && array.length !== arraySpec.length) {\n return [new ValidationError(key, array, `array length ${arraySpec.length} expected, length ${array.length} found`)];\n }\n\n if (arraySpec['min-length'] && array.length < arraySpec['min-length']) {\n return [new ValidationError(key, array, `array length at least ${arraySpec['min-length']} expected, length ${array.length} found`)];\n }\n\n let arrayElementSpec = {\n \"type\": arraySpec.value\n };\n\n if (styleSpec.$version < 7) {\n arrayElementSpec.function = arraySpec.function;\n }\n\n if (getType(arraySpec.value) === 'object') {\n arrayElementSpec = arraySpec.value;\n }\n\n let errors = [];\n for (let i = 0; i < array.length; i++) {\n errors = errors.concat(validateArrayElement({\n array,\n arrayIndex: i,\n value: array[i],\n valueSpec: arrayElementSpec,\n style,\n styleSpec,\n key: `${key}[${i}]`\n }));\n }\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateNumber(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n const type = getType(value);\n\n if (type !== 'number') {\n return [new ValidationError(key, value, `number expected, ${type} found`)];\n }\n\n if ('minimum' in valueSpec && value < valueSpec.minimum) {\n return [new ValidationError(key, value, `${value} is less than the minimum value ${valueSpec.minimum}`)];\n }\n\n if ('maximum' in valueSpec && value > valueSpec.maximum) {\n return [new ValidationError(key, value, `${value} is greater than the maximum value ${valueSpec.maximum}`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateNumber from './validate_number';\nimport { isExpression } from '../expression';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport {\n supportsPropertyExpression,\n supportsZoomExpression,\n supportsInterpolation\n} from '../util/properties';\n\nexport default function validateFunction(options) {\n const functionValueSpec = options.valueSpec;\n const functionType = unbundle(options.value.type);\n let stopKeyType;\n let stopDomainValues = {};\n let previousStopDomainValue;\n let previousStopDomainZoom;\n\n const isZoomFunction = functionType !== 'categorical' && options.value.property === undefined;\n const isPropertyFunction = !isZoomFunction;\n const isZoomAndPropertyFunction =\n getType(options.value.stops) === 'array' &&\n getType(options.value.stops[0]) === 'array' &&\n getType(options.value.stops[0][0]) === 'object';\n\n const errors = validateObject({\n key: options.key,\n value: options.value,\n valueSpec: options.styleSpec.function,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n stops: validateFunctionStops,\n default: validateFunctionDefault\n }\n });\n\n if (functionType === 'identity' && isZoomFunction) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"property\"'));\n }\n\n if (functionType !== 'identity' && !options.value.stops) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"stops\"'));\n }\n\n if (functionType === 'exponential' && options.valueSpec.expression && !supportsInterpolation(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'exponential functions not supported'));\n }\n\n if (options.styleSpec.$version >= 8) {\n if (isPropertyFunction && !supportsPropertyExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'property functions not supported'));\n } else if (isZoomFunction && !supportsZoomExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'zoom functions not supported'));\n }\n }\n\n if ((functionType === 'categorical' || isZoomAndPropertyFunction) && options.value.property === undefined) {\n errors.push(new ValidationError(options.key, options.value, '\"property\" property is required'));\n }\n\n return errors;\n\n function validateFunctionStops(options) {\n if (functionType === 'identity') {\n return [new ValidationError(options.key, options.value, 'identity function may not have a \"stops\" property')];\n }\n\n let errors = [];\n const value = options.value;\n\n errors = errors.concat(validateArray({\n key: options.key,\n value,\n valueSpec: options.valueSpec,\n style: options.style,\n styleSpec: options.styleSpec,\n arrayElementValidator: validateFunctionStop\n }));\n\n if (getType(value) === 'array' && value.length === 0) {\n errors.push(new ValidationError(options.key, value, 'array must have at least one stop'));\n }\n\n return errors;\n }\n\n function validateFunctionStop(options) {\n let errors = [];\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n if (value.length !== 2) {\n return [new ValidationError(key, value, `array length 2 expected, length ${value.length} found`)];\n }\n\n if (isZoomAndPropertyFunction) {\n if (getType(value[0]) !== 'object') {\n return [new ValidationError(key, value, `object expected, ${getType(value[0])} found`)];\n }\n if (value[0].zoom === undefined) {\n return [new ValidationError(key, value, 'object stop key must have zoom')];\n }\n if (value[0].value === undefined) {\n return [new ValidationError(key, value, 'object stop key must have value')];\n }\n if (previousStopDomainZoom && previousStopDomainZoom > unbundle(value[0].zoom)) {\n return [new ValidationError(key, value[0].zoom, 'stop zoom values must appear in ascending order')];\n }\n if (unbundle(value[0].zoom) !== previousStopDomainZoom) {\n previousStopDomainZoom = unbundle(value[0].zoom);\n previousStopDomainValue = undefined;\n stopDomainValues = {};\n }\n errors = errors.concat(validateObject({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: { zoom: {} },\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: { zoom: validateNumber, value: validateStopDomainValue }\n }));\n } else {\n errors = errors.concat(validateStopDomainValue({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: {},\n style: options.style,\n styleSpec: options.styleSpec\n }, value));\n }\n\n if (isExpression(deepUnbundle(value[1]))) {\n return errors.concat([new ValidationError(`${key}[1]`, value[1], 'expressions are not allowed in function stops.')]);\n }\n\n return errors.concat(validate({\n key: `${key}[1]`,\n value: value[1],\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n\n function validateStopDomainValue(options, stop) {\n const type = getType(options.value);\n const value = unbundle(options.value);\n\n const reportValue = options.value !== null ? options.value : stop;\n\n if (!stopKeyType) {\n stopKeyType = type;\n } else if (type !== stopKeyType) {\n return [new ValidationError(options.key, reportValue, `${type} stop domain type must match previous stop domain type ${stopKeyType}`)];\n }\n\n if (type !== 'number' && type !== 'string' && type !== 'boolean') {\n return [new ValidationError(options.key, reportValue, 'stop domain value must be a number, string, or boolean')];\n }\n\n if (type !== 'number' && functionType !== 'categorical') {\n let message = `number expected, ${type} found`;\n if (supportsPropertyExpression(functionValueSpec) && functionType === undefined) {\n message += '\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.';\n }\n return [new ValidationError(options.key, reportValue, message)];\n }\n\n if (functionType === 'categorical' && type === 'number' && (!isFinite(value) || Math.floor(value) !== value)) {\n return [new ValidationError(options.key, reportValue, `integer expected, found ${value}`)];\n }\n\n if (functionType !== 'categorical' && type === 'number' && previousStopDomainValue !== undefined && value < previousStopDomainValue) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must appear in ascending order')];\n } else {\n previousStopDomainValue = value;\n }\n\n if (functionType === 'categorical' && value in stopDomainValues) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must be unique')];\n } else {\n stopDomainValues[value] = true;\n }\n\n return [];\n }\n\n function validateFunctionDefault(options) {\n return validate({\n key: options.key,\n value: options.value,\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n });\n }\n}\n","// @flow\n\nimport ValidationError from '../error/validation_error';\n\nimport { createExpression, createPropertyExpression } from '../expression';\nimport { deepUnbundle } from '../util/unbundle_jsonlint';\nimport { isStateConstant } from '../expression/is_constant';\n\nexport default function validateExpression(options: any): Array<ValidationError> {\n const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec);\n if (expression.result === 'error') {\n return expression.value.map((error) => {\n return new ValidationError(`${options.key}${error.key}`, options.value, error.message);\n });\n }\n\n if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') &&\n (expression.value: any)._styleExpression.expression.possibleOutputs().indexOf(undefined) !== -1) {\n return [new ValidationError(options.key, options.value, `Invalid data expression for \"${options.propertyKey}\". Output values must be contained as literals within the expression.`)];\n }\n\n if (options.expressionContext === 'property' && options.propertyType === 'layout' &&\n (!isStateConstant((expression.value: any)._styleExpression.expression))) {\n return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with layout properties.')];\n }\n\n if (options.expressionContext === 'filter' && !isStateConstant((expression.value: any).expression)) {\n return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with filters.')];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\n\nexport default function validateEnum(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n const errors = [];\n\n if (Array.isArray(valueSpec.values)) { // <=v7\n if (valueSpec.values.indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`));\n }\n } else { // >=v8\n if (Object.keys(valueSpec.values).indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));\n }\n }\n return errors;\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateExpression from './validate_expression';\nimport validateEnum from './validate_enum';\nimport getType from '../util/get_type';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport extend from '../util/extend';\nimport { isExpressionFilter } from '../feature_filter';\n\nexport default function validateFilter(options) {\n if (isExpressionFilter(deepUnbundle(options.value))) {\n return validateExpression(extend({}, options, {\n expressionContext: 'filter',\n valueSpec: { value: 'boolean' }\n }));\n } else {\n return validateNonExpressionFilter(options);\n }\n}\n\nfunction validateNonExpressionFilter(options) {\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n const styleSpec = options.styleSpec;\n let type;\n\n let errors = [];\n\n if (value.length < 1) {\n return [new ValidationError(key, value, 'filter array must have at least 1 element')];\n }\n\n errors = errors.concat(validateEnum({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: styleSpec.filter_operator,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n\n switch (unbundle(value[0])) {\n case '<':\n case '<=':\n case '>':\n case '>=':\n if (value.length >= 2 && unbundle(value[1]) === '$type') {\n errors.push(new ValidationError(key, value, `\"$type\" cannot be use with operator \"${value[0]}\"`));\n }\n /* falls through */\n case '==':\n case '!=':\n if (value.length !== 3) {\n errors.push(new ValidationError(key, value, `filter array for operator \"${value[0]}\" must have 3 elements`));\n }\n /* falls through */\n case 'in':\n case '!in':\n if (value.length >= 2) {\n type = getType(value[1]);\n if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n }\n for (let i = 2; i < value.length; i++) {\n type = getType(value[i]);\n if (unbundle(value[1]) === '$type') {\n errors = errors.concat(validateEnum({\n key: `${key}[${i}]`,\n value: value[i],\n valueSpec: styleSpec.geometry_type,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n } else if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n errors.push(new ValidationError(`${key}[${i}]`, value[i], `string, number, or boolean expected, ${type} found`));\n }\n }\n break;\n\n case 'any':\n case 'all':\n case 'none':\n for (let i = 1; i < value.length; i++) {\n errors = errors.concat(validateNonExpressionFilter({\n key: `${key}[${i}]`,\n value: value[i],\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n break;\n\n case 'has':\n case '!has':\n type = getType(value[1]);\n if (value.length !== 2) {\n errors.push(new ValidationError(key, value, `filter array for \"${value[0]}\" operator must have 2 elements`));\n } else if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n break;\n\n }\n\n return errors;\n}\n","\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport { isFunction } from '../function';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport { supportsPropertyExpression } from '../util/properties';\n\nexport default function validateProperty(options, propertyType) {\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const value = options.value;\n const propertyKey = options.objectKey;\n const layerSpec = styleSpec[`${propertyType}_${options.layerType}`];\n\n if (!layerSpec) return [];\n\n const transitionMatch = propertyKey.match(/^(.*)-transition$/);\n if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) {\n return validate({\n key,\n value,\n valueSpec: styleSpec.transition,\n style,\n styleSpec\n });\n }\n\n const valueSpec = options.valueSpec || layerSpec[propertyKey];\n if (!valueSpec) {\n return [new ValidationError(key, value, `unknown property \"${propertyKey}\"`)];\n }\n\n let tokenMatch;\n if (getType(value) === 'string' && supportsPropertyExpression(valueSpec) && !valueSpec.tokens && (tokenMatch = /^{([^}]+)}$/.exec(value))) {\n return [new ValidationError(\n key, value,\n `\"${propertyKey}\" does not support interpolation syntax\\n` +\n `Use an identity property function instead: \\`{ \"type\": \"identity\", \"property\": ${JSON.stringify(tokenMatch[1])} }\\`.`)];\n }\n\n const errors = [];\n\n if (options.layerType === 'symbol') {\n if (propertyKey === 'text-field' && style && !style.glyphs) {\n errors.push(new ValidationError(key, value, 'use of \"text-field\" requires a style \"glyphs\" property'));\n }\n if (propertyKey === 'text-font' && isFunction(deepUnbundle(value)) && unbundle(value.type) === 'identity') {\n errors.push(new ValidationError(key, value, '\"text-font\" does not support identity functions'));\n }\n }\n\n return errors.concat(validate({\n key: options.key,\n value,\n valueSpec,\n style,\n styleSpec,\n expressionContext: 'property',\n propertyType,\n propertyKey\n }));\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validatePaintProperty(options) {\n return validateProperty(options, 'paint');\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validateLayoutProperty(options) {\n return validateProperty(options, 'layout');\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateFilter from './validate_filter';\nimport validatePaintProperty from './validate_paint_property';\nimport validateLayoutProperty from './validate_layout_property';\nimport validateSpec from './validate';\nimport extend from '../util/extend';\n\nexport default function validateLayer(options) {\n let errors = [];\n\n const layer = options.value;\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n\n if (!layer.type && !layer.ref) {\n errors.push(new ValidationError(key, layer, 'either \"type\" or \"ref\" is required'));\n }\n let type = unbundle(layer.type);\n const ref = unbundle(layer.ref);\n\n if (layer.id) {\n const layerId = unbundle(layer.id);\n for (let i = 0; i < options.arrayIndex; i++) {\n const otherLayer = style.layers[i];\n if (unbundle(otherLayer.id) === layerId) {\n errors.push(new ValidationError(key, layer.id, `duplicate layer id \"${layer.id}\", previously used at line ${otherLayer.id.__line__}`));\n }\n }\n }\n\n if ('ref' in layer) {\n ['type', 'source', 'source-layer', 'filter', 'layout'].forEach((p) => {\n if (p in layer) {\n errors.push(new ValidationError(key, layer[p], `\"${p}\" is prohibited for ref layers`));\n }\n });\n\n let parent;\n\n style.layers.forEach((layer) => {\n if (unbundle(layer.id) === ref) parent = layer;\n });\n\n if (!parent) {\n errors.push(new ValidationError(key, layer.ref, `ref layer \"${ref}\" not found`));\n } else if (parent.ref) {\n errors.push(new ValidationError(key, layer.ref, 'ref cannot reference another ref layer'));\n } else {\n type = unbundle(parent.type);\n }\n } else if (type !== 'background') {\n if (!layer.source) {\n errors.push(new ValidationError(key, layer, 'missing required property \"source\"'));\n } else {\n const source = style.sources && style.sources[layer.source];\n const sourceType = source && unbundle(source.type);\n if (!source) {\n errors.push(new ValidationError(key, layer.source, `source \"${layer.source}\" not found`));\n } else if (sourceType === 'vector' && type === 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a raster source`));\n } else if (sourceType === 'raster' && type !== 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a vector source`));\n } else if (sourceType === 'vector' && !layer['source-layer']) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" must specify a \"source-layer\"`));\n } else if (sourceType === 'raster-dem' && type !== 'hillshade') {\n errors.push(new ValidationError(key, layer.source, 'raster-dem source can only be used with layer type \\'hillshade\\'.'));\n } else if (type === 'line' && layer.paint && layer.paint['line-gradient'] &&\n (sourceType !== 'geojson' || !source.lineMetrics)) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`));\n }\n }\n }\n\n errors = errors.concat(validateObject({\n key,\n value: layer,\n valueSpec: styleSpec.layer,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'() {\n return [];\n },\n // We don't want to enforce the spec's `\"requires\": true` for backward compatibility with refs;\n // the actual requirement is validated above. See https://github.com/mapbox/mapbox-gl-js/issues/5772.\n type() {\n return validateSpec({\n key: `${key}.type`,\n value: layer.type,\n valueSpec: styleSpec.layer.type,\n style: options.style,\n styleSpec: options.styleSpec,\n object: layer,\n objectKey: 'type'\n });\n },\n filter: validateFilter,\n layout(options) {\n return validateObject({\n layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'(options) {\n return validateLayoutProperty(extend({layerType: type}, options));\n }\n }\n });\n },\n paint(options) {\n return validateObject({\n layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'(options) {\n return validatePaintProperty(extend({layerType: type}, options));\n }\n }\n });\n }\n }\n }));\n\n return errors;\n}\n","\nimport ValidationError from '../error/validation_error';\nimport { unbundle } from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateEnum from './validate_enum';\n\nexport default function validateSource(options) {\n const value = options.value;\n const key = options.key;\n const styleSpec = options.styleSpec;\n const style = options.style;\n\n if (!value.type) {\n return [new ValidationError(key, value, '\"type\" is required')];\n }\n\n const type = unbundle(value.type);\n let errors = [];\n\n switch (type) {\n case 'vector':\n case 'raster':\n case 'raster-dem':\n errors = errors.concat(validateObject({\n key,\n value,\n valueSpec: styleSpec[`source_${type.replace('-', '_')}`],\n style: options.style,\n styleSpec\n }));\n if ('url' in value) {\n for (const prop in value) {\n if (['type', 'url', 'tileSize'].indexOf(prop) < 0) {\n errors.push(new ValidationError(`${key}.${prop}`, value[prop], `a source with a \"url\" property may not include a \"${prop}\" property`));\n }\n }\n }\n return errors;\n\n case 'geojson':\n return validateObject({\n key,\n value,\n valueSpec: styleSpec.source_geojson,\n style,\n styleSpec\n });\n\n case 'video':\n return validateObject({\n key,\n value,\n valueSpec: styleSpec.source_video,\n style,\n styleSpec\n });\n\n case 'image':\n return validateObject({\n key,\n value,\n valueSpec: styleSpec.source_image,\n style,\n styleSpec\n });\n\n case 'canvas':\n errors.push(new ValidationError(key, null, `Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`, 'source.canvas'));\n return errors;\n\n default:\n return validateEnum({\n key: `${key}.type`,\n value: value.type,\n valueSpec: {values: ['vector', 'raster', 'raster-dem', 'geojson', 'video', 'image']},\n style,\n styleSpec\n });\n }\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\n\nexport default function validateLight(options) {\n const light = options.value;\n const styleSpec = options.styleSpec;\n const lightSpec = styleSpec.light;\n const style = options.style;\n\n let errors = [];\n\n const rootType = getType(light);\n if (light === undefined) {\n return errors;\n } else if (rootType !== 'object') {\n errors = errors.concat([new ValidationError('light', light, `object expected, ${rootType} found`)]);\n return errors;\n }\n\n for (const key in light) {\n const transitionMatch = key.match(/^(.*)-transition$/);\n\n if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {\n errors = errors.concat(validate({\n key,\n value: light[key],\n valueSpec: styleSpec.transition,\n style,\n styleSpec\n }));\n } else if (lightSpec[key]) {\n errors = errors.concat(validate({\n key,\n value: light[key],\n valueSpec: lightSpec[key],\n style,\n styleSpec\n }));\n } else {\n errors = errors.concat([new ValidationError(key, light[key], `unknown property \"${key}\"`)]);\n }\n }\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateString(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `string expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport extend from '../util/extend';\nimport { unbundle, deepUnbundle } from '../util/unbundle_jsonlint';\nimport { isExpression } from '../expression';\nimport { isFunction } from '../function';\n\nimport validateFunction from './validate_function';\nimport validateExpression from './validate_expression';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateBoolean from './validate_boolean';\nimport validateNumber from './validate_number';\nimport validateColor from './validate_color';\nimport validateConstants from './validate_constants';\nimport validateEnum from './validate_enum';\nimport validateFilter from './validate_filter';\nimport validateLayer from './validate_layer';\nimport validateSource from './validate_source';\nimport validateLight from './validate_light';\nimport validateString from './validate_string';\nimport validateFormatted from './validate_formatted';\n\nconst VALIDATORS = {\n '*'() {\n return [];\n },\n 'array': validateArray,\n 'boolean': validateBoolean,\n 'number': validateNumber,\n 'color': validateColor,\n 'constants': validateConstants,\n 'enum': validateEnum,\n 'filter': validateFilter,\n 'function': validateFunction,\n 'layer': validateLayer,\n 'object': validateObject,\n 'source': validateSource,\n 'light': validateLight,\n 'string': validateString,\n 'formatted': validateFormatted\n};\n\n\n// Main recursive validation function. Tracks:\n//\n// - key: string representing location of validation in style tree. Used only\n// for more informative error reporting.\n// - value: current value from style being evaluated. May be anything from a\n// high level object that needs to be descended into deeper or a simple\n// scalar value.\n// - valueSpec: current spec being evaluated. Tracks value.\n// - styleSpec: current full spec being evaluated.\n\nexport default function validate(options) {\n const value = options.value;\n const valueSpec = options.valueSpec;\n const styleSpec = options.styleSpec;\n\n if (valueSpec.expression && isFunction(unbundle(value))) {\n return validateFunction(options);\n\n } else if (valueSpec.expression && isExpression(deepUnbundle(value))) {\n return validateExpression(options);\n\n } else if (valueSpec.type && VALIDATORS[valueSpec.type]) {\n return VALIDATORS[valueSpec.type](options);\n\n } else {\n const valid = validateObject(extend({}, options, {\n valueSpec: valueSpec.type ? styleSpec[valueSpec.type] : valueSpec\n }));\n return valid;\n }\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateBoolean(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'boolean') {\n return [new ValidationError(key, value, `boolean expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport { parseCSSColor } from 'csscolorparser';\n\nexport default function validateColor(options) {\n const key = options.key;\n const value = options.value;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `color expected, ${type} found`)];\n }\n\n if (parseCSSColor(value) === null) {\n return [new ValidationError(key, value, `color expected, \"${value}\" found`)];\n }\n\n return [];\n}\n","// @flow\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nexport default function validateFormatted(options: any) {\n if (validateString(options).length === 0) {\n return [];\n }\n\n return validateExpression(options);\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateString from './validate_string';\n\nexport default function(options) {\n const value = options.value;\n const key = options.key;\n\n const errors = validateString(options);\n if (errors.length) return errors;\n\n if (value.indexOf('{fontstack}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{fontstack}\" token'));\n }\n\n if (value.indexOf('{range}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{range}\" token'));\n }\n\n return errors;\n}\n","\nimport validateConstants from './validate/validate_constants';\nimport validate from './validate/validate';\nimport latestStyleSpec from './reference/latest';\nimport validateGlyphsURL from './validate/validate_glyphs_url';\n\nimport validateSource from './validate/validate_source';\nimport validateLight from './validate/validate_light';\nimport validateLayer from './validate/validate_layer';\nimport validateFilter from './validate/validate_filter';\nimport validatePaintProperty from './validate/validate_paint_property';\nimport validateLayoutProperty from './validate/validate_layout_property';\n\n/**\n * Validate a Mapbox GL style against the style specification. This entrypoint,\n * `mapbox-gl-style-spec/lib/validate_style.min`, is designed to produce as\n * small a browserify bundle as possible by omitting unnecessary functionality\n * and legacy style specifications.\n *\n * @private\n * @param {Object} style The style to be validated.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the latest style spec is used.\n * @returns {Array<ValidationError>}\n * @example\n * var validate = require('mapbox-gl-style-spec/lib/validate_style.min');\n * var errors = validate(style);\n */\nfunction validateStyleMin(style, styleSpec) {\n styleSpec = styleSpec || latestStyleSpec;\n\n let errors = [];\n\n errors = errors.concat(validate({\n key: '',\n value: style,\n valueSpec: styleSpec.$root,\n styleSpec,\n style,\n objectElementValidators: {\n glyphs: validateGlyphsURL,\n '*'() {\n return [];\n }\n }\n }));\n\n if (style.constants) {\n errors = errors.concat(validateConstants({\n key: 'constants',\n value: style.constants,\n style,\n styleSpec\n }));\n }\n\n return sortErrors(errors);\n}\n\nvalidateStyleMin.source = wrapCleanErrors(validateSource);\nvalidateStyleMin.light = wrapCleanErrors(validateLight);\nvalidateStyleMin.layer = wrapCleanErrors(validateLayer);\nvalidateStyleMin.filter = wrapCleanErrors(validateFilter);\nvalidateStyleMin.paintProperty = wrapCleanErrors(validatePaintProperty);\nvalidateStyleMin.layoutProperty = wrapCleanErrors(validateLayoutProperty);\n\nfunction sortErrors(errors) {\n return [].concat(errors).sort((a, b) => {\n return a.line - b.line;\n });\n}\n\nfunction wrapCleanErrors(inner) {\n return function(...args) {\n return sortErrors(inner.apply(this, args));\n };\n}\n\nexport default validateStyleMin;\n","/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,12],$V1=[1,13],$V2=[1,9],$V3=[1,10],$V4=[1,11],$V5=[1,14],$V6=[1,15],$V7=[14,18,22,24],$V8=[18,22],$V9=[22,24];\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\nproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n // replace escaped characters with actual character\n this.$ = new String(yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\n .replace(/\\\\n/g,'\\n')\n .replace(/\\\\r/g,'\\r')\n .replace(/\\\\t/g,'\\t')\n .replace(/\\\\v/g,'\\v')\n .replace(/\\\\f/g,'\\f')\n .replace(/\\\\b/g,'\\b'));\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 2:\n\n this.$ = new Number(yytext);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 3:\n\n this.$ = null;\n \nbreak;\ncase 4:\n\n this.$ = new Boolean(true);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 5:\n\n this.$ = new Boolean(false);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 6:\nreturn this.$ = $$[$0-1];\nbreak;\ncase 13:\nthis.$ = {}; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 14: case 19:\nthis.$ = $$[$0-1]; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 15:\nthis.$ = [$$[$0-2], $$[$0]];\nbreak;\ncase 16:\nthis.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\nbreak;\ncase 17:\nthis.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\nbreak;\ncase 18:\nthis.$ = []; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 20:\nthis.$ = [$$[$0]];\nbreak;\ncase 21:\nthis.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,12:1,13:2,15:7,16:8,17:$V5,23:$V6},{1:[3]},{14:[1,16]},o($V7,[2,7]),o($V7,[2,8]),o($V7,[2,9]),o($V7,[2,10]),o($V7,[2,11]),o($V7,[2,12]),o($V7,[2,3]),o($V7,[2,4]),o($V7,[2,5]),o([14,18,21,22,24],[2,1]),o($V7,[2,2]),{3:20,4:$V0,18:[1,17],19:18,20:19},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:23,15:7,16:8,17:$V5,23:$V6,24:[1,21],25:22},{1:[2,6]},o($V7,[2,13]),{18:[1,24],22:[1,25]},o($V8,[2,16]),{21:[1,26]},o($V7,[2,18]),{22:[1,28],24:[1,27]},o($V9,[2,20]),o($V7,[2,14]),{3:20,4:$V0,20:29},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:30,15:7,16:8,17:$V5,23:$V6},o($V7,[2,19]),{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:31,15:7,16:8,17:$V5,23:$V6},o($V8,[2,17]),o($V8,[2,15]),o($V9,[2,21])],\ndefaultActions: {16:[2,6]},\nparseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function (match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState(condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 6\nbreak;\ncase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\nbreak;\ncase 3:return 17\nbreak;\ncase 4:return 18\nbreak;\ncase 5:return 23\nbreak;\ncase 6:return 24\nbreak;\ncase 7:return 22\nbreak;\ncase 8:return 21\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 11\nbreak;\ncase 11:return 8\nbreak;\ncase 12:return 14\nbreak;\ncase 13:return 'INVALID'\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\n}\n","\nimport validateStyleMin from './validate_style.min';\nimport ParsingError from './error/parsing_error';\nimport jsonlint from '@mapbox/jsonlint-lines-primitives';\nimport {v8} from './style-spec';\n\n/**\n * Validate a Mapbox GL style against the style specification.\n *\n * @private\n * @alias validate\n * @param {Object|String|Buffer} style The style to be validated. If a `String`\n * or `Buffer` is provided, the returned errors will contain line numbers.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the spec version is inferred from the stylesheet.\n * @returns {Array<ValidationError|ParsingError>}\n * @example\n * var validate = require('mapbox-gl-style-spec').validate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * var errors = validate(style);\n */\n\nexport default function validateStyle(style, styleSpec) {\n if (style instanceof String || typeof style === 'string' || style instanceof Buffer) {\n try {\n style = jsonlint.parse(style.toString());\n } catch (e) {\n return [new ParsingError(e)];\n }\n }\n\n styleSpec = styleSpec || v8;\n\n return validateStyleMin(style, styleSpec);\n}\n\nexport const source = validateStyleMin.source;\nexport const light = validateStyleMin.light;\nexport const layer = validateStyleMin.layer;\nexport const filter = validateStyleMin.filter;\nexport const paintProperty = validateStyleMin.paintProperty;\nexport const layoutProperty = validateStyleMin.layoutProperty;\n","\nimport migrateToV8 from './migrate/v8';\nimport migrateToExpressions from './migrate/expressions';\n\n/**\n * Migrate a Mapbox GL Style to the latest version.\n *\n * @private\n * @alias migrate\n * @param {object} style a Mapbox GL Style\n * @returns {Object} a migrated style\n * @example\n * var fs = require('fs');\n * var migrate = require('mapbox-gl-style-spec').migrate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * fs.writeFileSync('./style.json', JSON.stringify(migrate(style)));\n */\nexport default function(style) {\n let migrated = false;\n\n if (style.version === 7) {\n style = migrateToV8(style);\n migrated = true;\n }\n\n if (style.version === 8) {\n migrated = migrateToExpressions(style);\n migrated = true;\n }\n\n if (!migrated) {\n throw new Error('cannot migrate from', style.version);\n }\n\n return style;\n}\n","// @flow\n\nimport {\n eachLayer,\n eachProperty\n} from '../visit';\nimport { isExpression } from '../expression';\nimport convertFunction, {convertTokenString} from '../function/convert';\nimport convertFilter from '../feature_filter/convert';\n\nimport type { StyleSpecification } from '../types';\n\n/**\n * Migrate the given style object in place to use expressions. Specifically,\n * this will convert (a) \"stop\" functions, and (b) legacy filters to their\n * expression equivalents.\n */\nexport default function(style: StyleSpecification) {\n const converted = [];\n\n eachLayer(style, (layer) => {\n if (layer.filter) {\n layer.filter = (convertFilter(layer.filter): any);\n }\n });\n\n eachProperty(style, {paint: true, layout: true}, ({path, value, reference, set}) => {\n if (isExpression(value)) return;\n if (typeof value === 'object' && !Array.isArray(value)) {\n set(convertFunction(value, reference));\n converted.push(path.join('.'));\n } else if (reference.tokens && typeof value === 'string') {\n set(convertTokenString(value));\n }\n });\n\n return style;\n}\n\n","\nexport default function (style) {\n const styleIDs = [];\n const sourceIDs = [];\n const compositedSourceLayers = [];\n\n for (const id in style.sources) {\n const source = style.sources[id];\n\n if (source.type !== \"vector\")\n continue;\n\n const match = /^mapbox:\\/\\/(.*)/.exec(source.url);\n if (!match)\n continue;\n\n styleIDs.push(id);\n sourceIDs.push(match[1]);\n }\n\n if (styleIDs.length < 2)\n return style;\n\n styleIDs.forEach((id) => {\n delete style.sources[id];\n });\n\n const compositeID = sourceIDs.join(\",\");\n\n style.sources[compositeID] = {\n \"type\": \"vector\",\n \"url\": `mapbox://${compositeID}`\n };\n\n style.layers.forEach((layer) => {\n if (styleIDs.indexOf(layer.source) >= 0) {\n layer.source = compositeID;\n\n if ('source-layer' in layer) {\n if (compositedSourceLayers.indexOf(layer['source-layer']) >= 0) {\n throw new Error('Conflicting source layer names');\n } else {\n compositedSourceLayers.push(layer['source-layer']);\n }\n }\n }\n });\n\n return style;\n}\n","\nexport default ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];\n","\nimport refProperties from './util/ref_properties';\n\nfunction deref(layer, parent) {\n const result = {};\n\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n\n refProperties.forEach((k) => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n\n return result;\n}\n\nexport default derefLayers;\n\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array<Layer>} layers\n * @returns {Array<Layer>}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n\n return layers;\n}\n","\nimport deref from '../deref';\n\nfunction eachLayer(style, callback) {\n for (const k in style.layers) {\n callback(style.layers[k]);\n }\n}\n\nexport default function(style) {\n style.version = 9;\n\n // remove user-specified refs\n style.layers = deref(style.layers);\n\n // remove class-specific paint properties\n eachLayer(style, (layer) => {\n for (const k in layer) {\n if (/paint\\..*/.test(k)) {\n delete layer[k];\n }\n }\n });\n\n return style;\n}\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {this.id = null;};\n Delayed.prototype.set = function (ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 30;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n input.init(d);\n }\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n // Add a span to a line.\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n var line = getLine(doc, lineNo$$1);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers || (emitter._handlers = {});\n map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range$$1;\n try {range$$1 = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range$$1 || range$$1.parentElement() != te) { return false }\n return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var this$1 = this;\n\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n var this$1 = this;\n\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this$1.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map$$1, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map$$1.length; i += 3) {\n mStart = map$$1[i];\n mEnd = map$$1[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map$$1[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n node = map$$1[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n node = map$$1[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n }\n function pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = true; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight$$1 = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top || y >= coords.bottom;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor]);\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[cm.options.gutters[i]] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range$$1 = doc.sel.ranges[i];\n if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n var collapsed = range$$1.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range$$1.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range$$1, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range$$1, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range$$1.from(), sTo = range$$1.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (height < 2) { height = textHeight(display); }\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm);\n return true\n }\n return false\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range$$1) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range$$1;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range$$1 = cm.curOp.scrollToPos;\n if (range$$1) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n scrollToCoordsRange(cm, from, to, range$$1.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this$1.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range$$1 = document.createRange();\n range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range$$1.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range$$1);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(cm) {\n var width = cm.display.gutters.offsetWidth;\n cm.display.sizer.style.marginLeft = width + \"px\";\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function updateGutters(cm) {\n var gutters = cm.display.gutters, specs = cm.options.gutters;\n removeChildren(gutters);\n var i = 0;\n for (; i < specs.length; ++i) {\n var gutterClass = specs[i];\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n if (gutterClass == \"CodeMirror-linenumbers\") {\n cm.display.lineGutter = gElt;\n gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = i ? \"\" : \"none\";\n updateGutterSpace(cm);\n }\n\n // Make sure the gutters options contains the element\n // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n function setGuttersForLineNumbers(options) {\n var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n if (found == -1 && options.lineNumbers) {\n options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n } else if (found > -1 && !options.lineNumbers) {\n options.gutters = options.gutters.slice(0);\n options.gutters.splice(found, 1);\n }\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n var this$1 = this;\n\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this$1.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var this$1 = this;\n\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this$1.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n var this$1 = this;\n\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this$1.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight$$1);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n var this$1 = this;\n\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n var this$1 = this;\n\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this$1;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n var this$1 = this;\n\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this$1.lines[i];\n this$1.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var e = at + n; at < e; ++at)\n { if (op(this$1.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n var this$1 = this;\n\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this$1;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n var this$1 = this;\n\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this$1.height -= oldHeight - child.height;\n if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this$1.children.splice(++i, 0, leaf);\n leaf.parent = this$1;\n }\n child.lines = child.lines.slice(0, remaining);\n this$1.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n var this$1 = this;\n\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this$1[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var this$1 = this;\n\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n var this$1 = this;\n\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n var this$1 = this;\n\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this$1; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this$1.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range$$1 = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range$$1.head; }\n else if (start == \"anchor\") { pos = range$$1.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n else { pos = range$$1.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n var this$1 = this;\n\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n clipPos(this$1, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var this$1 = this;\n\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var this$1 = this;\n\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var this$1 = this;\n\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range$$1 = sel.ranges[i];\n changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this$1, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo$$1 = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n span.from == null && lineNo$$1 != from.line ||\n span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo$$1;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo$$1;\n });\n return clipPos(this, Pos(lineNo$$1, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n var this$1 = this;\n\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this$1.linked[i];\n if (link.doc != other) { continue }\n this$1.linked.splice(i, 1);\n other.unlinkDoc(this$1);\n detachSharedMarkers(findSharedMarkers(this$1));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n { return }\n\n var reader = new FileReader;\n reader.onload = operation(cm, function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n text[i] = content;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map$$1, handle, context) {\n map$$1 = getKeyMap(map$$1);\n var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map$$1.fallthrough) {\n if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map$$1.fallthrough, handle, context) }\n for (var i = 0; i < map$$1.fallthrough.length; i++) {\n var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range$$1 = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n else\n { ourRange = range$$1; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range$$1.anchor, anchor) > 0) {\n head = range$$1.head;\n anchor = minPos(oldRange.from(), range$$1.anchor);\n } else {\n head = range$$1.anchor;\n anchor = maxPos(oldRange.to(), range$$1.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n e_preventDefault(e);\n display.input.focus();\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range$$1) {\n var anchor = range$$1.anchor;\n var head = range$$1.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n var order = getOrder(anchorLine);\n if (!order) { return range$$1 }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.options.gutters.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.options.gutters[i];\n signal(cm, type, cm, line, gutter, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n guttersChanged(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"firstLineNumber\", 1, guttersChanged, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function guttersChanged(cm) {\n updateGutters(cm);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n setGuttersForLineNumbers(options);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input);\n display.wrapper.CodeMirror = this;\n updateGutters(this);\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(bind(onFocus, this), 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this$1, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var paste = cm.state.pasteIncoming || origin == \"paste\";\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range$$1 = sel.ranges[i$1];\n var from = range$$1.from(), to = range$$1.to();\n if (range$$1.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = false;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range$$1 = sel.ranges[i];\n if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n var mode = cm.getModeAt(range$$1.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range$$1.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck) {\n field.setAttribute(\"autocorrect\", \"off\");\n field.setAttribute(\"autocapitalize\", \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map$$1, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n },\n removeKeyMap: function(map$$1) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var this$1 = this;\n\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this$1.state.modeGen++;\n regChange(this$1);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var this$1 = this;\n\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range$$1 = ranges[i];\n if (!range$$1.empty()) {\n var from = range$$1.from(), to = range$$1.to();\n var start = Math.max(end, from.line);\n end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this$1, j, how); }\n var newRanges = this$1.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range$$1.head.line > end) {\n indentLine(this$1, range$$1.head.line, how, true);\n end = range$$1.head.line;\n if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var this$1 = this;\n\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range$$1 = this.doc.sel.primary();\n if (start == null) { pos = range$$1.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range$$1.from() : range$$1.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var this$1 = this;\n\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this$1.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range$$1) {\n if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range$$1) {\n var other = findPosH(doc, range$$1.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var this$1 = this;\n\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this$1, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this$1, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range$$1) {\n if (collapse)\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range$$1 == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range$$1, margin) {\n if (range$$1 == null) {\n range$$1 = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range$$1 == \"number\") {\n range$$1 = {from: Pos(range$$1, 0), to: null};\n } else if (range$$1.from == null) {\n range$$1 = {from: range$$1, to: null};\n }\n if (!range$$1.to) { range$$1.to = range$$1.from; }\n range$$1.margin = margin || 0;\n\n if (range$$1.from.line != null) {\n scrollToRange(this, range$$1);\n } else {\n scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo$$1 = this.display.viewFrom;\n this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n ++lineNo$$1;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"char\", \"column\" (like char, but doesn't\n // cross line boundaries), \"word\" (across next word), or \"group\" (to\n // the start of next group of word or non-word-non-whitespace\n // chars). The visually param controls whether, in right-to-left\n // text, direction 1 means to move towards the next index in the\n // string, or towards the character to the right of the current\n // position. The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n function findNextLine() {\n var l = pos.line + dir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck);\n\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor())\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range$$1 = found[0].find(0)))\n { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map$$1 = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map$$1.length; j += 3) {\n var curNode = map$$1[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map$$1[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = true;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = true; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n cm.state.pasteIncoming = true;\n input.focus();\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.42.2\";\n\n return CodeMirror;\n\n})));\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineMode(\"elm\", function() {\n\n function switchState(source, setState, f) {\n setState(f);\n return f(source, setState);\n }\n\n // These should all be Unicode extended, as per the Haskell 2010 report\n var smallRE = /[a-z_]/;\n var largeRE = /[A-Z]/;\n var digitRE = /[0-9]/;\n var hexitRE = /[0-9A-Fa-f]/;\n var octitRE = /[0-7]/;\n var idRE = /[a-z_A-Z0-9\\']/;\n var symbolRE = /[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]/;\n var specialRE = /[(),;[\\]`{}]/;\n var whiteCharRE = /[ \\t\\v\\f]/; // newlines are handled in tokenizer\n\n function normal() {\n return function (source, setState) {\n if (source.eatWhile(whiteCharRE)) {\n return null;\n }\n\n var ch = source.next();\n if (specialRE.test(ch)) {\n if (ch == '{' && source.eat('-')) {\n var t = \"comment\";\n if (source.eat('#')) t = \"meta\";\n return switchState(source, setState, ncomment(t, 1));\n }\n return null;\n }\n\n if (ch == '\\'') {\n if (source.eat('\\\\'))\n source.next(); // should handle other escapes here\n else\n source.next();\n\n if (source.eat('\\''))\n return \"string\";\n return \"error\";\n }\n\n if (ch == '\"') {\n return switchState(source, setState, stringLiteral);\n }\n\n if (largeRE.test(ch)) {\n source.eatWhile(idRE);\n if (source.eat('.'))\n return \"qualifier\";\n return \"variable-2\";\n }\n\n if (smallRE.test(ch)) {\n var isDef = source.pos === 1;\n source.eatWhile(idRE);\n return isDef ? \"type\" : \"variable\";\n }\n\n if (digitRE.test(ch)) {\n if (ch == '0') {\n if (source.eat(/[xX]/)) {\n source.eatWhile(hexitRE); // should require at least 1\n return \"integer\";\n }\n if (source.eat(/[oO]/)) {\n source.eatWhile(octitRE); // should require at least 1\n return \"number\";\n }\n }\n source.eatWhile(digitRE);\n var t = \"number\";\n if (source.eat('.')) {\n t = \"number\";\n source.eatWhile(digitRE); // should require at least 1\n }\n if (source.eat(/[eE]/)) {\n t = \"number\";\n source.eat(/[-+]/);\n source.eatWhile(digitRE); // should require at least 1\n }\n return t;\n }\n\n if (symbolRE.test(ch)) {\n if (ch == '-' && source.eat(/-/)) {\n source.eatWhile(/-/);\n if (!source.eat(symbolRE)) {\n source.skipToEnd();\n return \"comment\";\n }\n }\n source.eatWhile(symbolRE);\n return \"builtin\";\n }\n\n return \"error\";\n }\n }\n\n function ncomment(type, nest) {\n if (nest == 0) {\n return normal();\n }\n return function(source, setState) {\n var currNest = nest;\n while (!source.eol()) {\n var ch = source.next();\n if (ch == '{' && source.eat('-')) {\n ++currNest;\n } else if (ch == '-' && source.eat('}')) {\n --currNest;\n if (currNest == 0) {\n setState(normal());\n return type;\n }\n }\n }\n setState(ncomment(type, currNest));\n return type;\n }\n }\n\n function stringLiteral(source, setState) {\n while (!source.eol()) {\n var ch = source.next();\n if (ch == '\"') {\n setState(normal());\n return \"string\";\n }\n if (ch == '\\\\') {\n if (source.eol() || source.eat(whiteCharRE)) {\n setState(stringGap);\n return \"string\";\n }\n if (!source.eat('&')) source.next(); // should handle other escapes here\n }\n }\n setState(normal());\n return \"error\";\n }\n\n function stringGap(source, setState) {\n if (source.eat('\\\\')) {\n return switchState(source, setState, stringLiteral);\n }\n source.next();\n setState(normal());\n return \"error\";\n }\n\n\n var wellKnownWords = (function() {\n var wkw = {};\n\n var keywords = [\n \"case\", \"of\", \"as\",\n \"if\", \"then\", \"else\",\n \"let\", \"in\",\n \"infix\", \"infixl\", \"infixr\",\n \"type\", \"alias\",\n \"input\", \"output\", \"foreign\", \"loopback\",\n \"module\", \"where\", \"import\", \"exposing\",\n \"_\", \"..\", \"|\", \":\", \"=\", \"\\\\\", \"\\\"\", \"->\", \"<-\"\n ];\n\n for (var i = keywords.length; i--;)\n wkw[keywords[i]] = \"keyword\";\n\n return wkw;\n })();\n\n\n\n return {\n startState: function () { return { f: normal() }; },\n copyState: function (s) { return { f: s.f }; },\n\n token: function(stream, state) {\n var t = state.f(stream, function(s) { state.f = s; });\n var w = stream.current();\n return (wellKnownWords.hasOwnProperty(w)) ? wellKnownWords[w] : t;\n }\n };\n\n });\n\n CodeMirror.defineMIME(\"text/x-elm\", \"elm\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\da-f]+|o[0-7]+|b[01]+)n?/i)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:n|(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function inList(name, list) {\n for (var v = list; v; v = v.next) if (v.name == name) return true\n return false;\n }\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context)\n if (newContext != null) {\n state.context = newContext\n return\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars)\n return\n }\n }\n // Fall through means this is global\n if (parserConfig.globalVars && !inList(varname, state.globalVars))\n state.globalVars = new Var(varname, state.globalVars)\n }\n function registerVarScoped(varname, context) {\n if (!context) {\n return null\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev)\n if (!inner) return null\n if (inner == context.prev) return context\n return new Context(inner, context.vars, true)\n } else if (inList(varname, context.vars)) {\n return context\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false)\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n function Var(name, next) { this.name = name; this.next = next }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n cx.state.localVars = defaultVars\n }\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n cx.state.localVars = null\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars\n cx.state.context = cx.state.context.prev\n }\n popcontext.lex = true\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), className, poplex); }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typeexpr, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, block, poplex)\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"))\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), expression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n if (type == \"import\") return cont(expression);\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^>]|<.*?>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\") {\n cx.marked = \"keyword\"\n return cont(value == \"keyof\" ? typeexpr : expressionNoComma)\n }\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\"\n return cont(afterType)\n }\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType)\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), typeprop)\n }\n }\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n if (type == \":\") return cont(typeexpr)\n return pass(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n if (type == \"[\") return cont(expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(eltpattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n if (type == \"[\") return cont(expression, expect(']'), expect(':'), proppattern);\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function eltpattern() {\n return pass(pattern, maybeAssign)\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(isTS ? classfield : functiondef, classBody);\n }\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), isTS ? classfield : functiondef, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n return pass(functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n\n expressionAllowed: expressionAllowed,\n\n skipExpression: function(state) {\n var top = state.cc[state.cc.length - 1]\n if (top == expression || top == expressionNoComma) state.cc.pop()\n }\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n","import { Elm } from \"./src/Main.elm\";\nimport { migrate } from \"@mapbox/mapbox-gl-style-spec\";\nimport deref from \"@mapbox/mapbox-gl-style-spec/migrate/v9\"\nimport CodeMirror from \"codemirror/lib/codemirror.js\";\nimport \"codemirror/lib/codemirror.css\";\nimport \"codemirror/theme/base16-light.css\";\nimport \"codemirror/mode/elm/elm.js\";\nimport \"codemirror/mode/javascript/javascript.js\";\n\nvar app = Elm.Main.init({});\n\ncustomElements.define(\n \"code-editor\",\n class extends HTMLElement {\n constructor() {\n super();\n this._editorValue = \"\";\n }\n\n get editorValue() {\n return this._editorValue;\n }\n\n set editorValue(value) {\n if (this._editorValue === value) return;\n this._editorValue = value;\n if (!this._editor) return;\n this._editor.setValue(value);\n }\n\n get readonly() {\n return this._readonly;\n }\n\n set readonly(value) {\n this._readonly = value;\n if (!this._editor) return;\n this._editor.setOption('readonly', value);\n }\n\n get mode() {\n return this._mode;\n }\n\n set mode(value) {\n this._mode = value;\n if (!this._editor) return;\n this._editor.setOption('mode', value);\n }\n\n connectedCallback() {\n this._editor = CodeMirror(this, {\n identUnit: 4,\n mode: this._mode,\n lineNumbers: true,\n value: this._editorValue,\n readOnly: this._readonly,\n lineWrapping: true\n });\n\n this._editor.on(\"changes\", () => {\n this._editorValue = this._editor.getValue();\n console.log(\"changes\", this._editorValue)\n this.dispatchEvent(new CustomEvent(\"editorChanged\", {detail: this._editorValue}));\n });\n\n const {width, height} = this.getBoundingClientRect()\n this._editor.setSize(width, height);\n }\n }\n);\n\napp.ports.requestStyleUpgrade.subscribe(style => {\n try {\n const migrated = deref(migrate(JSON.parse(style)));\n app.ports.styleUpgradeComplete.send({type: 'Ok', result: migrated});\n } catch(error) {\n app.ports.styleUpgradeComplete.send({type: 'Err', error});\n }\n\n});\n"]} \ No newline at end of file
diff --git a/docs/style-generator/style-generator.90798390.css b/docs/style-generator/style-generator.90798390.css
new file mode 100644
index 0000000..3c99970
--- /dev/null
+++ b/docs/style-generator/style-generator.90798390.css
@@ -0,0 +1 @@
+.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.cm-s-base16-light .CodeMirror-line::selection,.cm-s-base16-light .CodeMirror-line>span::selection,.cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.cm-s-base16-light .CodeMirror-line::-moz-selection,.cm-s-base16-light .CodeMirror-line>span::-moz-selection,.cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}.cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.cm-s-base16-light .CodeMirror-guttermarker-subtle,.cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.cm-s-base16-light span.cm-comment{color:#8f5536}.cm-s-base16-light span.cm-atom,.cm-s-base16-light span.cm-number{color:#aa759f}.cm-s-base16-light span.cm-attribute,.cm-s-base16-light span.cm-property{color:#90a959}.cm-s-base16-light span.cm-keyword{color:#ac4142}.cm-s-base16-light span.cm-string{color:#f4bf75}.cm-s-base16-light span.cm-variable{color:#90a959}.cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.cm-s-base16-light span.cm-def{color:#d28445}.cm-s-base16-light span.cm-bracket{color:#202020}.cm-s-base16-light span.cm-tag{color:#ac4142}.cm-s-base16-light span.cm-link{color:#aa759f}.cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.cm-s-base16-light .CodeMirror-matchingbracket{color:#f5f5f5!important;background-color:#6a9fb5!important} \ No newline at end of file
diff --git a/docs/style-generator/style-generator.e65d4760.js b/docs/style-generator/style-generator.e65d4760.js
new file mode 100644
index 0000000..4cb025c
--- /dev/null
+++ b/docs/style-generator/style-generator.e65d4760.js
@@ -0,0 +1,39 @@
+parcelRequire=function(e,r,n,t){var i="function"==typeof parcelRequire&&parcelRequire,o="function"==typeof require&&require;function u(n,t){if(!r[n]){if(!e[n]){var f="function"==typeof parcelRequire&&parcelRequire;if(!t&&f)return f(n,!0);if(i)return i(n,!0);if(o&&"string"==typeof n)return o(n);var c=new Error("Cannot find module '"+n+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[n][1][r]||r},p.cache={};var l=r[n]=new u.Module(n);e[n][0].call(l.exports,p,l,l.exports,this)}return r[n].exports;function p(e){return u(p.resolve(e))}}u.isParcelRequire=!0,u.Module=function(e){this.id=e,this.bundle=u,this.exports={}},u.modules=e,u.cache=r,u.parent=i,u.register=function(r,n){e[r]=[function(e,r){r.exports=n},{}]};for(var f=0;f<n.length;f++)u(n[f]);if(n.length){var c=u(n[n.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=c:"function"==typeof define&&define.amd?define(function(){return c}):t&&(this[t]=c)}return u}({"3oS9":[function(require,module,exports) {
+!function(r){"use strict";function n(r,n,e){return e.a=r,e.f=n,e}function e(r){return n(2,r,function(n){return function(e){return r(n,e)}})}function t(r){return n(3,r,function(n){return function(e){return function(t){return r(n,e,t)}}})}function a(r){return n(4,r,function(n){return function(e){return function(t){return function(a){return r(n,e,t,a)}}}})}function u(r){return n(5,r,function(n){return function(e){return function(t){return function(a){return function(u){return r(n,e,t,a,u)}}}}})}function i(r){return n(6,r,function(n){return function(e){return function(t){return function(a){return function(u){return function(i){return r(n,e,t,a,u,i)}}}}}})}function c(r){return n(7,r,function(n){return function(e){return function(t){return function(a){return function(u){return function(i){return function(c){return r(n,e,t,a,u,i,c)}}}}}}})}function o(r){return n(8,r,function(n){return function(e){return function(t){return function(a){return function(u){return function(i){return function(c){return function(o){return r(n,e,t,a,u,i,c,o)}}}}}}}})}function f(r,n,e){return 2===r.a?r.f(n,e):r(n)(e)}function s(r,n,e,t){return 3===r.a?r.f(n,e,t):r(n)(e)(t)}function b(r,n,e,t,a){return 4===r.a?r.f(n,e,t,a):r(n)(e)(t)(a)}function l(r,n,e,t,a,u){return 5===r.a?r.f(n,e,t,a,u):r(n)(e)(t)(a)(u)}function d(r,n,e,t,a,u,i){return 6===r.a?r.f(n,e,t,a,u,i):r(n)(e)(t)(a)(u)(i)}function h(r,n,e,t,a,u,i,c){return 7===r.a?r.f(n,e,t,a,u,i,c):r(n)(e)(t)(a)(u)(i)(c)}function p(r,n,e,t,a,u,i,c,o){return 8===r.a?r.f(n,e,t,a,u,i,c,o):r(n)(e)(t)(a)(u)(i)(c)(o)}var v={$:0};function g(r,n){return{$:1,a:r,b:n}}var m=e(g);function $(r){for(var n=v,e=r.length;e--;)n=g(r[e],n);return n}function y(r){for(var n=[];r.b;r=r.b)n.push(r.a);return n}var w=t(function(r,n,e){for(var t=[];n.b&&e.b;n=n.b,e=e.b)t.push(f(r,n.a,e.a));return $(t)}),x=e(function(r,n){return $(y(n).sort(function(n,e){return L(r(n),r(e))}))});function k(r,n){for(var e,t=[],a=j(r,n,0,t);a&&(e=t.pop());a=j(e.a,e.b,0,t));return a}function j(r,n,e,t){if(e>100)return t.push(E(r,n)),!0;if(r===n)return!0;if("object"!=typeof r||null===r||null===n)return"function"==typeof r&&R(5),!1;for(var a in 0>r.$&&(r=Nn(r),n=Nn(n)),r)if(!j(r[a],n[a],e+1,t))return!1;return!0}function L(r,n,e){if("object"!=typeof r)return r===n?0:n>r?-1:1;if(!r.$)return(e=L(r.a,n.a))?e:(e=L(r.b,n.b))?e:L(r.c,n.c);for(;r.b&&n.b&&!(e=L(r.a,n.a));r=r.b,n=n.b);return e||(r.b?1:n.b?-1:0)}var A=e(function(r,n){var e=L(r,n);return 0>e?zn:e?Cn:Tn}),q=0;function E(r,n){return{a:r,b:n}}function M(r,n,e){return{a:r,b:n,c:e}}function S(r){return r}function T(r,n){var e={};for(var t in r)e[t]=r[t];for(var t in n)e[t]=n[t];return e}function C(r,n){if("string"==typeof r)return r+n;if(!r.b)return n;var e=g(r.a,n);r=r.b;for(var t=e;r.b;r=r.b)t=t.b=g(r.a,n);return e}var z=t(function(r,n,e){for(var t=Array(r),a=0;r>a;a++)t[a]=e(n+a);return t}),B=e(function(r,n){for(var e=Array(r),t=0;r>t&&n.b;t++)e[t]=n.a,n=n.b;return e.length=t,E(e,n)});function R(r){throw Error("https://github.com/elm/core/blob/1.0.0/hints/"+r+".md")}var N=Math.ceil,_=Math.floor,P=Math.round,O=Math.log,F=e(function(r,n){return r+n}),J=t(function(r,n,e){for(var t=e.length;t--;){var a=e[t],u=e.charCodeAt(t);56320>u||u>57343||(a=e[--t]+a),n=f(r,S(a),n)}return n}),I=e(function(r,n){return n.split(r)}),U=e(function(r,n){return n.join(r)}),X=t(function(r,n,e){return e.slice(r,n)}),D=e(function(r,n){for(var e=n.length;e--;){var t=n[e],a=n.charCodeAt(e);if(56320>a||a>57343||(t=n[--e]+t),!r(S(t)))return!1}return!0});function G(r){return r+""}var K=e(function(r,n){return{$:10,d:r,b:n}}),H=e(function(r,n){return{$:11,e:r,b:n}});function W(r,n){return{$:13,f:r,g:n}}var Y=e(function(r,n){return{$:14,b:n,h:r}}),Q=e(function(r,n){return W(r,[n])}),V=t(function(r,n,e){return W(r,[n,e])}),Z=a(function(r,n,e,t){return W(r,[n,e,t])}),rr=i(function(r,n,e,t,a,u){return W(r,[n,e,t,a,u])}),nr=c(function(r,n,e,t,a,u,i){return W(r,[n,e,t,a,u,i])}),er=e(function(r,n){return tr(r,br(n))});function tr(r,n){switch(r.$){case 3:return"boolean"==typeof n?ie(n):ir("a BOOL",n);case 2:return"number"!=typeof n?ir("an INT",n):n>-2147483647&&2147483647>n&&(0|n)===n?ie(n):!isFinite(n)||n%1?ir("an INT",n):ie(n);case 4:return"number"==typeof n?ie(n):ir("a FLOAT",n);case 6:return"string"==typeof n?ie(n):n instanceof String?ie(n+""):ir("a STRING",n);case 9:return null===n?ie(r.c):ir("null",n);case 5:return ie(sr(n));case 7:return Array.isArray(n)?ar(r.b,n,$):ir("a LIST",n);case 8:return Array.isArray(n)?ar(r.b,n,ur):ir("an ARRAY",n);case 10:var e=r.d;if("object"!=typeof n||null===n||!(e in n))return ir("an OBJECT with a field named `"+e+"`",n);var t=tr(r.b,n[e]);return Sn(t)?t:ue(f(oe,e,t.a));case 11:var a=r.e;return Array.isArray(n)?n.length>a?(t=tr(r.b,n[a]),Sn(t)?t:ue(f(fe,a,t.a))):ir("a LONGER array. Need index "+a+" but only see "+n.length+" entries",n):ir("an ARRAY",n);case 12:if("object"!=typeof n||null===n||Array.isArray(n))return ir("an OBJECT",n);var u=v;for(var i in n)if(n.hasOwnProperty(i)){if(t=tr(r.b,n[i]),!Sn(t))return ue(f(oe,i,t.a));u=g(E(i,t.a),u)}return ie(Gn(u));case 13:for(var c=r.f,o=r.g,s=0;o.length>s;s++){if(t=tr(o[s],n),!Sn(t))return t;c=c(t.a)}return ie(c);case 14:return t=tr(r.b,n),Sn(t)?tr(r.h(t.a),n):t;case 15:for(var b=v,l=r.g;l.b;l=l.b){if(t=tr(l.a,n),Sn(t))return t;b=g(t.a,b)}return ue(se(Gn(b)));case 1:return ue(f(ce,r.a,sr(n)));case 0:return ie(r.a)}}function ar(r,n,e){for(var t=n.length,a=Array(t),u=0;t>u;u++){var i=tr(r,n[u]);if(!Sn(i))return ue(f(fe,u,i.a));a[u]=i.a}return ie(e(a))}function ur(r){return f(te,r.length,function(n){return r[n]})}function ir(r,n){return ue(f(ce,"Expecting "+r,sr(n)))}function cr(r,n){if(r===n)return!0;if(r.$!==n.$)return!1;switch(r.$){case 0:case 1:return r.a===n.a;case 3:case 2:case 4:case 6:case 5:return!0;case 9:return r.c===n.c;case 7:case 8:case 12:return cr(r.b,n.b);case 10:return r.d===n.d&&cr(r.b,n.b);case 11:return r.e===n.e&&cr(r.b,n.b);case 13:return r.f===n.f&&or(r.g,n.g);case 14:return r.h===n.h&&cr(r.b,n.b);case 15:return or(r.g,n.g)}}function or(r,n){var e=r.length;if(e!==n.length)return!1;for(var t=0;e>t;t++)if(!cr(r[t],n[t]))return!1;return!0}var fr=e(function(r,n){return JSON.stringify(br(n),null,r)+""});function sr(r){return r}function br(r){return r}function lr(r){return{$:0,a:r}}function dr(r){return{$:1,a:r}}function hr(r){return{$:2,b:r,c:null}}sr(null);var pr=e(function(r,n){return{$:3,b:r,d:n}}),vr=e(function(r,n){return{$:4,b:r,d:n}}),gr=0;function mr(r){var n={$:0,e:gr++,f:r,g:null,h:[]};return wr(n),n}var $r=!1,yr=[];function wr(r){if(yr.push(r),!$r){for($r=!0;r=yr.shift();)xr(r);$r=!1}}function xr(r){for(;r.f;){var n=r.f.$;if(0===n||1===n){for(;r.g&&r.g.$!==n;)r.g=r.g.i;if(!r.g)return;r.f=r.g.b(r.f.a),r.g=r.g.i}else{if(2===n)return void(r.f.c=r.f.b(function(n){r.f=n,wr(r)}));if(5===n){if(0===r.h.length)return;r.f=r.f.b(r.h.shift())}else r.g={$:3===n?0:1,b:r.f.b,i:r.g},r.f=r.f.d}}}var kr={};function jr(r,n){var e={g:n,h:void 0},t=r.c,a=r.d,u=r.e,i=r.f;function c(r){return f(pr,c,{$:5,b:function(n){var c=n.a;return 0===n.$?s(a,e,c,r):u&&i?b(t,e,c.i,c.j,r):s(t,e,u?c.i:c.j,r)}})}return e.h=mr(f(pr,c,r.b))}var Lr=e(function(r,n){return hr(function(e){r.g(n),e(lr(q))})});function Ar(r){return function(n){return{$:1,k:r,l:n}}}function qr(r,n,e){var t,a={};for(var u in Er(!0,n,a,null),Er(!1,e,a,null),r)(t=r[u]).h.push({$:"fx",a:a[u]||{i:v,j:v}}),wr(t)}function Er(r,n,e,t){switch(n.$){case 1:var a=n.k,u=function(r,e,t){function a(r){for(var n=t;n;n=n.q)r=n.p(r);return r}return f(r?kr[e].e:kr[e].f,a,n.l)}(r,a,t);return void(e[a]=function(r,n,e){return e=e||{i:v,j:v},r?e.i=g(n,e.i):e.j=g(n,e.j),e}(r,u,e[a]));case 2:for(var i=n.m;i.b;i=i.b)Er(r,i.a,e,t);return;case 3:return void Er(r,n.o,e,{p:n.n,q:t})}}function Mr(r){kr[r]&&R(3)}var Sr=e(function(r,n){return n});function Tr(r){var n=[],e=kr[r].r,a=(0,hr(function(r){var n=setTimeout(function(){r(lr(q))},0);return function(){clearTimeout(n)}}));return kr[r].b=a,kr[r].c=t(function(r,t){for(;t.b;t=t.b)for(var u=n,i=br(e(t.a)),c=0;u.length>c;c++)u[c](i);return a}),{subscribe:function(r){n.push(r)},unsubscribe:function(r){var e=(n=n.slice()).indexOf(r);0>e||n.splice(e,1)}}}var Cr=e(function(r,n){return function(e){return r(n(e))}});var zr,Br=u(function(r,n,e,t,a){for(var u=r.length,i=a.length>=n+u,c=0;i&&u>c;){var o=a.charCodeAt(n);i=r[c++]===a[n++]&&(10===o?(e++,t=1):(t++,55296==(63488&o)?r[c++]===a[n++]:1))}return M(i?n:-1,e,t)}),Rr=t(function(r,n,e){return e.length>n?55296==(63488&e.charCodeAt(n))?r(S(e.substr(n,2)))?n+2:-1:r(S(e[n]))?"\n"===e[n]?-2:n+1:-1:-1}),Nr=t(function(r,n,e){return e.charCodeAt(n)===r}),_r=e(function(r,n){for(;n.length>r;r++){var e=n.charCodeAt(r);if(48>e||e>57)return r}return r}),Pr=t(function(r,n,e){for(var t=0;e.length>n;n++){var a=e.charCodeAt(n)-48;if(0>a||a>=r)break;t=r*t+a}return E(n,t)}),Or=e(function(r,n){for(var e=0;n.length>r;r++){var t=n.charCodeAt(r);if(48>t||t>57)if(65>t||t>70){if(97>t||t>102)break;e=16*e+t-87}else e=16*e+t-55;else e=16*e+t-48}return E(r,e)}),Fr=e(function(r,n){return hr(function(e){var t=new XMLHttpRequest;!function(r,n){Xi(n)&&r.addEventListener("progress",function(r){r.lengthComputable&&mr(n.a({c4:r.loaded,c5:r.total}))})}(t,n),t.addEventListener("error",function(){e(dr(Hi))}),t.addEventListener("timeout",function(){e(dr(Wi))}),t.addEventListener("load",function(){e(function(r,n){var e=function(r){return{eE:r.responseURL,cq:{M:r.status,dP:r.statusText},aJ:Jr(r.getAllResponseHeaders()),cX:r.response}}(r);if(200>r.status||r.status>=300)return e.body=r.responseText,dr(Gi(e));var t=n(e);return Sn(t)?lr(t.a):(e.body=r.responseText,dr(f(Di,t.a,e)))}(t,r.a2.a))});try{t.open(r.a8,r.eE,!0)}catch(n){return e(dr(Ki(r.eE)))}!function(r,n){for(var e=n.aJ;e.b;e=e.b)r.setRequestHeader(e.a.a,e.a.b);r.responseType=n.a2.b,r.withCredentials=n.bE,Xi(n.bB)&&(r.timeout=n.bB.a)}(t,r);var a=r.cX;return t.send(Yi(a)?(t.setRequestHeader("Content-Type",a.a),a.b):a.a),function(){t.abort()}})});function Jr(r){var n=gt;if(!r)return n;for(var e=r.split("\r\n"),t=e.length;t--;){var a=e[t],u=a.indexOf(": ");if(u>0){var i=a.substring(0,u),c=a.substring(u+2);n=s(Ui,i,function(r){return ae(Xi(r)?c+", "+r.a:c)},n)}}return n}var Ir="undefined"!=typeof document?document:{};function Ur(r,n){r.appendChild(n)}function Xr(r){return{$:0,a:r}}var Dr,Gr=e(function(r,n){return e(function(e,t){for(var a=[],u=0;t.b;t=t.b){var i=t.a;u+=i.b||0,a.push(i)}return u+=a.length,{$:1,c:n,d:rn(e),e:a,f:r,b:u}})})(void 0),Kr=e(function(r,n){return e(function(e,t){for(var a=[],u=0;t.b;t=t.b){var i=t.a;u+=i.b.b||0,a.push(i)}return u+=a.length,{$:2,c:n,d:rn(e),e:a,f:r,b:u}})})(void 0),Hr=e(function(r,n){return{$:"a0",n:r,o:n}}),Wr=e(function(r,n){return{$:"a1",n:r,o:n}}),Yr=e(function(r,n){return{$:"a2",n:r,o:n}}),Qr=e(function(r,n){return{$:"a3",n:r,o:n}});function Vr(r){return"script"==r?"p":r}function Zr(r){return/^\s*(javascript:|data:text\/html)/i.test(r)?"":r}function rn(r){for(var n={};r.b;r=r.b){var e=r.a,t=e.$,a=e.n,u=e.o;if("a2"!==t){var i=n[t]||(n[t]={});"a3"===t&&"class"===a?nn(i,a,u):i[a]=u}else"className"===a?nn(n,a,br(u)):n[a]=br(u)}return n}function nn(r,n,e){var t=r[n];r[n]=t?t+" "+e:e}function en(r,n){var e=r.$;if(5===e)return en(r.k||(r.k=r.m()),n);if(0===e)return Ir.createTextNode(r.a);if(4===e){for(var t=r.k,a=r.j;4===t.$;)"object"!=typeof a?a=[a,t.j]:a.push(t.j),t=t.k;var u={j:a,p:n};return(i=en(t,u)).elm_event_node_ref=u,i}if(3===e)return tn(i=r.h(r.g),n,r.d),i;var i=r.f?Ir.createElementNS(r.f,r.c):Ir.createElement(r.c);zr&&"a"==r.c&&i.addEventListener("click",zr(i)),tn(i,n,r.d);for(var c=r.e,o=0;c.length>o;o++)Ur(i,en(1===e?c[o]:c[o].b,n));return i}function tn(r,n,e){for(var t in e){var a=e[t];"a1"===t?an(r,a):"a0"===t?on(r,n,a):"a3"===t?un(r,a):"a4"===t?cn(r,a):("value"!==t||"checked"!==t||r[t]!==a)&&(r[t]=a)}}function an(r,n){var e=r.style;for(var t in n)e[t]=n[t]}function un(r,n){for(var e in n){var t=n[e];t?r.setAttribute(e,t):r.removeAttribute(e)}}function cn(r,n){for(var e in n){var t=n[e],a=t.f,u=t.o;u?r.setAttributeNS(a,e,u):r.removeAttributeNS(a,e)}}function on(r,n,e){var t=r.elmFs||(r.elmFs={});for(var a in e){var u=e[a],i=t[a];if(u){if(i){if(i.q.$===u.$){i.q=u;continue}r.removeEventListener(a,i)}i=fn(n,u),r.addEventListener(a,i,Dr&&{passive:2>Ac(u)}),t[a]=i}else r.removeEventListener(a,i),t[a]=void 0}}try{window.addEventListener("t",null,Object.defineProperty({},"passive",{get:function(){Dr=!0}}))}catch(r){}function fn(r,n){function e(n){var t=e.q,a=tr(t.a,n);if(Sn(a)){for(var u,i=Ac(t),c=a.a,o=i?3>i?c.a:c.dP:c,f=1==i?c.b:3==i&&c.by,s=(f&&n.stopPropagation(),(2==i?c.b:3==i&&c.bt)&&n.preventDefault(),r);u=s.j;){if("function"==typeof u)o=u(o);else for(var b=u.length;b--;)o=u[b](o);s=s.p}s(o,f)}}return e.q=n,e}function sn(r,n){return r.$==n.$&&cr(r.a,n.a)}function bn(r,n,e,t){var a={$:n,r:e,s:t,t:void 0,u:void 0};return r.push(a),a}function ln(r,n,e,t){if(r!==n){var a=r.$,u=n.$;if(a!==u){if(1!==a||2!==u)return void bn(e,0,t,n);n=function(r){for(var n=r.e,e=n.length,t=Array(e),a=0;e>a;a++)t[a]=n[a].b;return{$:1,c:r.c,d:r.d,e:t,f:r.f,b:r.b}}(n),u=1}switch(u){case 5:for(var i=r.l,c=n.l,o=i.length,f=o===c.length;f&&o--;)f=i[o]===c[o];if(f)return void(n.k=r.k);n.k=n.m();var s=[];return ln(r.k,n.k,s,0),void(s.length>0&&bn(e,1,t,s));case 4:for(var b=r.j,l=n.j,d=!1,h=r.k;4===h.$;)d=!0,"object"!=typeof b?b=[b,h.j]:b.push(h.j),h=h.k;for(var p=n.k;4===p.$;)d=!0,"object"!=typeof l?l=[l,p.j]:l.push(p.j),p=p.k;return d&&b.length!==l.length?void bn(e,0,t,n):((d?function(r,n){for(var e=0;r.length>e;e++)if(r[e]!==n[e])return!1;return!0}(b,l):b===l)||bn(e,2,t,l),void ln(h,p,e,t+1));case 0:return void(r.a!==n.a&&bn(e,3,t,n.a));case 1:return void dn(r,n,e,t,pn);case 2:return void dn(r,n,e,t,vn);case 3:if(r.h!==n.h)return void bn(e,0,t,n);var v=hn(r.d,n.d);v&&bn(e,4,t,v);var g=n.i(r.g,n.g);return void(g&&bn(e,5,t,g))}}}function dn(r,n,e,t,a){if(r.c===n.c&&r.f===n.f){var u=hn(r.d,n.d);u&&bn(e,4,t,u),a(r,n,e,t)}else bn(e,0,t,n)}function hn(r,n,e){var t;for(var a in r)if("a1"!==a&&"a0"!==a&&"a3"!==a&&"a4"!==a)if(a in n){var u=r[a],i=n[a];u===i&&"value"!==a&&"checked"!==a||"a0"===e&&sn(u,i)||((t=t||{})[a]=i)}else(t=t||{})[a]=e?"a1"===e?"":"a0"===e||"a3"===e?void 0:{f:r[a].f,o:void 0}:"string"==typeof r[a]?"":null;else{var c=hn(r[a],n[a]||{},a);c&&((t=t||{})[a]=c)}for(var o in n)o in r||((t=t||{})[o]=n[o]);return t}function pn(r,n,e,t){var a=r.e,u=n.e,i=a.length,c=u.length;i>c?bn(e,6,t,{v:c,i:i-c}):c>i&&bn(e,7,t,{v:i,e:u});for(var o=c>i?i:c,f=0;o>f;f++){var s=a[f];ln(s,u[f],e,++t),t+=s.b||0}}function vn(r,n,e,t){for(var a=[],u={},i=[],c=r.e,o=n.e,f=c.length,s=o.length,b=0,l=0,d=t;f>b&&s>l;){var h=(A=c[b]).a,p=(q=o[l]).a,v=A.b,g=q.b;if(h!==p){var m=c[b+1],$=o[l+1];if(m)var y=m.a,w=m.b,x=p===y;if($)var k=$.a,j=$.b,L=h===k;if(L&&x)ln(v,j,a,++d),mn(u,a,h,g,l,i),d+=v.b||0,$n(u,a,h,w,++d),d+=w.b||0,b+=2,l+=2;else if(L)d++,mn(u,a,p,g,l,i),ln(v,j,a,d),d+=v.b||0,b+=1,l+=2;else if(x)$n(u,a,h,v,++d),d+=v.b||0,ln(w,g,a,++d),d+=w.b||0,b+=2,l+=1;else{if(!m||y!==k)break;$n(u,a,h,v,++d),mn(u,a,p,g,l,i),d+=v.b||0,ln(w,j,a,++d),d+=w.b||0,b+=2,l+=2}}else ln(v,g,a,++d),d+=v.b||0,b++,l++}for(;f>b;){var A;$n(u,a,(A=c[b]).a,v=A.b,++d),d+=v.b||0,b++}for(;s>l;){var q,E=E||[];mn(u,a,(q=o[l]).a,q.b,void 0,E),l++}(a.length>0||i.length>0||E)&&bn(e,8,t,{w:a,x:i,y:E})}var gn="_elmW6BL";function mn(r,n,e,t,a,u){var i=r[e];if(!i)return u.push({r:a,A:i={c:0,z:t,r:a,s:void 0}}),void(r[e]=i);if(1===i.c){u.push({r:a,A:i}),i.c=2;var c=[];return ln(i.z,t,c,i.r),i.r=a,void(i.s.s={w:c,A:i})}mn(r,n,e+gn,t,a,u)}function $n(r,n,e,t,a){var u=r[e];if(u){if(0===u.c){u.c=2;var i=[];return ln(t,u.z,i,a),void bn(n,9,a,{w:i,A:u})}$n(r,n,e+gn,t,a)}else{var c=bn(n,9,a,void 0);r[e]={c:1,z:t,r:a,s:c}}}function yn(r,n,e,t){return 0===e.length?r:(function r(n,e,t,a){!function n(e,t,a,u,i,c,o){for(var f=a[u],s=f.r;s===i;){var b=f.$;if(1===b)r(e,t.k,f.s,o);else if(8===b)f.t=e,f.u=o,(l=f.s.w).length>0&&n(e,t,l,0,i,c,o);else if(9===b){f.t=e,f.u=o;var l,d=f.s;d&&(d.A.s=e,(l=d.w).length>0&&n(e,t,l,0,i,c,o))}else f.t=e,f.u=o;if(!(f=a[++u])||(s=f.r)>c)return u}var h=t.$;if(4===h){for(var p=t.k;4===p.$;)p=p.k;return n(e,p,a,u,i+1,c,e.elm_event_node_ref)}for(var v=t.e,g=e.childNodes,m=0;v.length>m;m++){var $=1===h?v[m]:v[m].b,y=++i+($.b||0);if(!(i>s||s>y||(f=a[u=n(g[m],$,a,u,i,y,o)])&&(s=f.r)<=c))return u;i=y}return u}(n,e,t,0,0,e.b,a)}(r,n,e,t),wn(r,e))}function wn(r,n){for(var e=0;n.length>e;e++){var t=n[e],a=t.t,u=xn(a,t);a===r&&(r=u)}return r}function xn(r,n){switch(n.$){case 0:return function(r){var e=r.parentNode,t=en(n.s,n.u);return t.elm_event_node_ref||(t.elm_event_node_ref=r.elm_event_node_ref),e&&t!==r&&e.replaceChild(t,r),t}(r);case 4:return tn(r,n.u,n.s),r;case 3:return r.replaceData(0,r.length,n.s),r;case 1:return wn(r,n.s);case 2:return r.elm_event_node_ref?r.elm_event_node_ref.j=n.s:r.elm_event_node_ref={j:n.s,p:n.u},r;case 6:for(var e=n.s,t=0;e.i>t;t++)r.removeChild(r.childNodes[e.v]);return r;case 7:for(var a=(e=n.s).e,u=r.childNodes[t=e.v];a.length>t;t++)r.insertBefore(en(a[t],n.u),u);return r;case 9:if(!(e=n.s))return r.parentNode.removeChild(r),r;var i=e.A;return void 0!==i.r&&r.parentNode.removeChild(r),i.s=wn(r,e.w),r;case 8:return function(r,n){var e=n.s,t=function(r,n){if(r){for(var e=Ir.createDocumentFragment(),t=0;r.length>t;t++){var a=r[t].A;Ur(e,2===a.c?a.s:en(a.z,n.u))}return e}}(e.y,n);r=wn(r,e.w);for(var a=e.x,u=0;a.length>u;u++){var i=a[u],c=i.A,o=2===c.c?c.s:en(c.z,n.u);r.insertBefore(o,r.childNodes[i.r])}return t&&Ur(r,t),r}(r,n);case 5:return n.s(r);default:R(10)}}var kn=a(function(r,n,e,t){return function(r,n,e,t,a,u){var i=f(er,r,sr(n?n.flags:void 0));Sn(i)||R(2);var c={},o=(i=e(i.a)).a,s=u(l,o),b=function(r,n){var e;for(var t in kr){var a=kr[t];a.a&&((e=e||{})[t]=a.a(t,n)),r[t]=jr(a,n)}return e}(c,l);function l(r,n){s(o=(i=f(t,r,o)).a,n),qr(c,i.b,a(o))}return qr(c,i.b,a(o)),b?{ports:b}:{}}(n,t,r.dG,r.eD,r.ej,function(n,e){var t=r.aq&&r.aq(n),a=r.eG,u=Ir.title,i=Ir.body,c=function r(n){if(3===n.nodeType)return Xr(n.textContent);if(1!==n.nodeType)return Xr("");for(var e=v,t=n.attributes,a=t.length;a--;){var u=t[a];e=g(f(Qr,u.name,u.value),e)}var i=n.tagName.toLowerCase(),c=v,o=n.childNodes;for(a=o.length;a--;)c=g(r(o[a]),c);return s(Gr,i,e,c)}(i);return function(r,n){n(r);var e=0;function t(){e=1===e?0:(jn(t),n(r),1)}return function(a,u){r=a,u?(n(r),2===e&&(e=1)):(0===e&&jn(t),e=2)}}(e,function(r){zr=t;var e=a(r),o=Gr("body")(v)(e.cX),f=function(r,n){var e=[];return ln(r,n,e,0),e}(c,o);i=yn(i,c,f,n),c=o,zr=0,u!==e.ey&&(Ir.title=u=e.ey)})})}),jn="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:function(r){setTimeout(r,1e3/60)};"undefined"!=typeof document&&document,"undefined"!=typeof window&&window;var Ln,An,qn,En,Mn={$:1},Sn=function(r){return!r.$},Tn=1,Cn=2,zn=0,Bn=t(function(r,n,e){for(;;){if(-2===e.$)return n;var t=e.d,a=r,u=s(r,e.b,e.c,s(Bn,r,n,e.e));r=a,n=u,e=t}}),Rn=m,Nn=function(r){return s(Bn,t(function(r,n,e){return f(Rn,E(r,n),e)}),v,r)},_n=a(function(r,n,e,t){return{$:0,a:r,b:n,c:e,d:t}}),Pn=N,On=e(function(r,n){return O(n)/O(r)}),Fn=function(r){return r},Jn=Pn(f(On,2,32)),In=[],Un=b(_n,0,Jn,In,In),Xn=B,Dn=t(function(r,n,e){for(;;){if(!e.b)return n;var t=e.b,a=r,u=f(r,e.a,n);r=a,n=u,e=t}}),Gn=function(r){return s(Dn,Rn,v,r)},Kn=e(function(r,n){for(;;){var e=f(Xn,32,r),t=e.b,a=f(Rn,{$:0,a:e.a},n);if(!t.b)return Gn(a);r=t,n=a}}),Hn=function(r){return r.a},Wn=e(function(r,n){for(;;){var e=Pn(n/32);if(1===e)return f(Xn,32,r).a;r=f(Kn,r,v),n=e}}),Yn=e(function(r,n){return r(n)}),Qn=_,Vn=e(function(r,n){return L(r,n)>0?r:n}),Zn=function(r){return r.length},re=e(function(r,n){if(n.f){var e=32*n.f,t=Qn(f(On,32,e-1)),a=r?Gn(n.i):n.i,u=f(Wn,a,n.f);return b(_n,Zn(n.h)+e,f(Vn,5,t*Jn),u,n.h)}return b(_n,Zn(n.h),Jn,In,n.h)}),ne=z,ee=u(function(r,n,e,t,a){for(;;){if(0>n)return f(re,!1,{i:t,f:e/32|0,h:a});var u={$:1,a:s(ne,32,n,r)};r=r,n-=32,e=e,t=f(Rn,u,t),a=a}}),te=e(function(r,n){if(r>0){var e=r%32;return l(ee,n,r-e-32,r,v,s(ne,e,r-e,n))}return Un}),ae=function(r){return{$:0,a:r}},ue=function(r){return{$:1,a:r}},ie=function(r){return{$:0,a:r}},ce=e(function(r,n){return{$:3,a:r,b:n}}),oe=e(function(r,n){return{$:0,a:r,b:n}}),fe=e(function(r,n){return{$:1,a:r,b:n}}),se=function(r){return{$:2,a:r}},be=function(r){var n=r.charCodeAt(0);return 55296>n||n>56319?n:1024*(n-55296)+r.charCodeAt(1)-56320+65536},le=function(r){var n=be(r);return n>=97&&122>=n},de=function(r){var n=be(r);return 90>=n&&n>=65},he=function(r){return le(r)||de(r)},pe=function(r){var n=be(r);return 57>=n&&n>=48},ve=function(r){return le(r)||de(r)||pe(r)},ge=function(r){return s(Dn,e(function(r,n){return n+1}),0,r)},me=w,$e=t(function(r,n,e){for(;;){if(L(r,n)>=1)return e;var t=r,a=n-1,u=f(Rn,n,e);r=t,n=a,e=u}}),ye=e(function(r,n){return s($e,r,n,v)}),we=e(function(r,n){return s(me,r,f(ye,0,ge(n)-1),n)}),xe=D,ke=G,je=e(function(r,n){return f(U,r,y(n))}),Le=e(function(r,n){return $(f(I,r,n))}),Ae=function(r){return f(je,"\n ",f(Le,"\n",r))},qe=fr,Ee=e(function(r,n){return"\n\n("+ke(r+1)+") "+Ae(Me(n))}),Me=function(r){return f(Se,r,v)},Se=e(function(r,n){r:for(;;)switch(r.$){case 0:var e=r.a,t=r.b,a=function(){var r,n,t=(n=(r=e).charCodeAt(0))?ae(55296>n||n>56319?E(S(r[0]),r.slice(1)):E(S(r[0]+r[1]),r.slice(2))):Mn;if(1===t.$)return!1;var a=t.a,u=a.b;return he(a.a)&&f(xe,ve,u)}();r=t,n=f(Rn,a?"."+e:"['"+e+"']",n);continue r;case 1:t=r.b;var u="["+ke(r.a)+"]";r=t,n=f(Rn,u,n);continue r;case 2:var i=r.a;if(i.b){if(i.b.b){var c=(n.b?"The Json.Decode.oneOf at json"+f(je,"",Gn(n)):"Json.Decode.oneOf")+" failed in the following "+ke(ge(i))+" ways:";return f(je,"\n\n",f(Rn,c,f(we,Ee,i)))}r=t=i.a,n=n;continue r}return"Ran into a Json.Decode.oneOf with no possibilities"+(n.b?" at json"+f(je,"",Gn(n)):"!");default:var o=r.a,s=r.b;return(c=n.b?"Problem with the value at json"+f(je,"",Gn(n))+":\n\n ":"Problem with the given value:\n\n")+Ae(f(qe,4,s))+"\n\n"+o}}),Te={$:2,m:v},Ce=function(r){return{$:4,a:r}},ze={$:5},Be=(An=ze,Mr(Ln="styleUpgradeComplete"),kr[Ln]={f:Cr,r:An,a:function(r,n){var e=v,a=kr[r].r,u=lr(null);return kr[r].b=u,kr[r].c=t(function(r,n){return e=n,u}),{send:function(r){var t=f(er,a,sr(r));Sn(t)||R(4);for(var u=t.a,i=e;i.b;i=i.b)n(i.a(u))}}}},Ar(Ln)),Re=$(["Mapbox","Style"]),Ne=e(function(r,n){return{$:0,a:r,b:n}}),_e=e(function(r,n){return f(Ne,r,$([n]))}),Pe=e(function(r,n){return{$:3,a:r,b:n}}),Oe=e(function(r,n){return{$:0,a:r,b:n}}),Fe=t(function(r,n,e){return f(Pe,r,f(Oe,n,e))}),Je=function(r){return{$:4,a:r}},Ie=e(function(r,n){return{$:0,a:r,b:n}}),Ue=function(r){return{$:1,a:r}},Xe=e(function(r,n){return f(Pe,r,Ue(n))}),De=a(function(r,n,e,t){return{$:2,a:r,b:n,c:e,d:t}}),Ge=t(function(r,n,e){return b(De,r,$([n]),v,e)}),Ke=function(r){return $([s(Ge,"style",(n=f(Xe,Re,"Style"),f(Ie,n,v)),f(_e,s(Fe,$(["Mapbox","Style"]),"Style","Style"),Je(r)))]);var n},He=function(r){return r},We=F,Ye=e(function(r,n){for(;;){if(!n.b)return!1;var e=n.b;if(r(n.a))return!0;r=r,n=e}}),Qe=function(r){return r.length},Ve=a(function(r,n,t,a){return f(Ye,function(r){return ge(f(Le,"\n",r))>1},a)||s(Dn,e(function(r,n){return n+Qe(r)}),0,a)>100?"\n"+f(We," ",f(je,"\n ",f(Le,"\n",r+" "+f(je,"\n"+n,a)+"\n"+t))):""===t&&""===r?f(je,n,a):r+" "+f(je,n,a)+" "+t}),Ze=function(r){return!r.$&&!!r.b.b},rt=function(r){var n=function(r){return r.$?r.a:r.b};switch(r.$){case 0:return n(e=r.a);case 1:var e=r.b;return f(je,".",r.a)+"."+n(e);case 2:return r.b+"."+n(e=r.c);default:return n(e=r.b)}},nt=a(function(r,n,e,t){if(t.b){var a=t.a,u=t.b;if(u.b){var i=u.a,c=u.b;if(c.b){var o=c.a,l=c.b;if(l.b){var d=l.b;return f(r,a,f(r,i,f(r,o,f(r,l.a,e>500?s(Dn,r,n,Gn(d)):b(nt,r,n,e+1,d)))))}return f(r,a,f(r,i,f(r,o,n)))}return f(r,a,f(r,i,n))}return f(r,a,n)}return n}),et=t(function(r,n,e){return b(nt,r,n,0,e)}),tt=e(function(r,n){return s(et,e(function(n,e){return f(Rn,r(n),e)}),v,n)}),at=function(r){return Ze(r)?"("+ut(r)+")":ut(r)},ut=function(r){switch(r.$){case 0:var n=r.b,e=rt(r.a);if(function(){switch(e){case"++":case"-":case"+":case"*":case"/":case"//":case"^":case"|>":case"<|":return!0;default:return!1}}()){if(n.b&&n.b.b){var t=n.a,a=n.b,u=a.a,i=a.b;return"|>"===e?b(Ve,""," |> ","",$([ut(t),f(je," ",f(tt,ut,f(Rn,u,i)))])):ut(t)+" "+e+" "+f(je," ",f(tt,ut,f(Rn,u,i)))}return"("+e+") "+f(je," ",f(tt,at,n))}return f(je," ",f(Rn,e,f(tt,function(r){return Ze(r)?"("+ut(r)+")":ut(r)},n)));case 1:return r.a;case 2:return b(Ve,"[",", ","]",f(tt,ut,r.a));case 3:return b(Ve,"(",", ",")",f(tt,ut,r.a));default:return b(Ve,"{",", ","}",f(tt,function(r){return r.a+" = "+ut(r.b)},r.a))}},it=e(function(r,n){switch(n.$){case 0:var e=n.a;return ge(t=n.b)>0?r?"("+rt(e)+" "+f(je," ",f(tt,it(!0),t))+")":rt(e)+" "+f(je," ",f(tt,it(!0),t)):rt(e);case 1:return"{ "+f(je,", ",f(tt,function(r){return r.a+" = "+f(it,!1,r.b)},n.a))+" }";case 2:var t=n.a,a=f(je," -> ",f(tt,it(!1),t));return r?"("+a+")":a;case 3:return t=n.a,"( "+f(je,", ",f(tt,it(!1),t))+" )";default:return n.a}}),ct=it(!1),ot=function(r){switch(r.$){case 0:var n=r.c;return"type "+f(je," ",f(Rn,t=r.a,r.b))+"\n = "+f(je,"\n | ",f(tt,function(r){var n=r.b;return f(je," ",f(Rn,r.a,f(tt,it(!0),n)))},n))+"\n\n\n";case 1:var e=r.c;return"type alias "+f(je," ",f(Rn,t=r.a,r.b))+"\n ="+ct(e)+"\n\n\n";case 3:return"{-|"+r.a+"}";default:var t,a=r.b,u=r.d,i=(t=r.a)+" "+f(je," ",f(tt,He,r.c))+" ="+function(r){return ge(f(Le,"\n",r))>1?r:"\n "+r}(ut(u))+"\n\n\n";return a.b?t+" : "+f(je," -> ",f(tt,ct,a))+"\n"+i:i}},ft=function(r){switch(r.$){case 0:case 1:return r.a;default:return r.a+"(..)"}},st=function(r){r:for(;;){if(r.b&&r.b.b){var n=r.a,e=n.a,t=n.b,a=n.c,u=r.b,i=u.a,c=i.a,o=i.b,s=i.c,b=u.b;if(k(e,c)&&(k(t,o)||""===t||""===o)){r=f(Rn,M(e,""===t?o:t,C(a,s)),b);continue r}return f(Rn,M(e,t,a),st(f(Rn,M(c,o,s),b)))}return r}},bt=function(r){switch(r.$){case 0:return!1;case 1:var n=r.a;r:for(;n.b&&!n.b.b;)switch(n.a){case"Basics":case"List":case"Maybe":case"Result":case"String":case"Char":case"Tuple":case"Debug":case"Platform":return!1;default:break r}return!0;case 2:var e=E(n=r.a,r.b);r:for(;e.a.b&&"Platform"===e.a.a&&e.a.b.b&&!e.a.b.b.b;)switch(e.a.b.a){case"Cmd":if("Cmd"===e.b)return!1;break r;case"Sub":if("Sub"===e.b)return!1;break r;default:break r}return!0;default:if(r.b.$){var t=E(n=r.a,r.b.a);r:for(;t.a.b;)if(t.a.b.b){if("Platform"!==t.a.a||t.a.b.b.b)break r;switch(t.a.b.a){case"Cmd":if("Cmd"===t.b)return!1;break r;case"Sub":if("Sub"===t.b)return!1;break r;default:break r}}else switch(t.a.a){case"Basics":return!1;case"List":switch(t.b){case"List":case"::":return!1;default:break r}case"Maybe":if("Maybe"===t.b)return!1;break r;case"Result":if("Result"===t.b)return!1;break r;case"String":if("String"===t.b)return!1;break r;case"Char":if("Char"===t.b)return!1;break r;case"Platform":if("Program"===t.b)return!1;break r;default:break r}return!0}var a=E(n=r.a,r.b.a);r:for(;a.a.b&&!a.a.b.b;)switch(a.a.a){case"Basics":return!1;case"List":if("List"===a.b)return!1;break r;case"Maybe":if("Maybe"===a.b)return!1;break r;case"Result":if("Result"===a.b)return!1;break r;default:break r}return!0}},lt=function(r){switch(r.$){case 0:return M("not-possible","",v);case 1:var n=r.b;return M(f(je,".",r.a),"",v);case 2:var e=r.b;return n=r.c,M(f(je,".",r.a),e,v);default:return n=r.b,M(f(je,".",r.a),"",$((t=n).$?[t.a]:[t.a+"(..)"]))}var t},dt=e(function(r,n){return s(et,e(function(n,e){return r(n)?f(Rn,n,e):e}),v,n)}),ht=function(r){return r},pt=x,vt={$:-2},gt=vt,mt=gt,$t=u(function(r,n,e,t,a){return{$:-1,a:r,b:n,c:e,d:t,e:a}}),yt=A,wt=u(function(r,n,e,t,a){if(-1!==a.$||a.a){if(-1!==t.$||t.a||-1!==t.d.$||t.d.a)return l($t,r,n,e,t,a);var u=t.d;return i=t.e,l($t,0,t.b,t.c,l($t,1,u.b,u.c,u.d,u.e),l($t,1,n,e,i,a))}var i,c=a.b,o=a.c,f=a.d,s=a.e;return-1!==t.$||t.a?l($t,r,c,o,l($t,0,n,e,t,f),s):l($t,0,n,e,l($t,1,t.b,t.c,t.d,i=t.e),l($t,1,c,o,f,s))}),xt=t(function(r,n,e){if(-2===e.$)return l($t,0,r,n,vt,vt);var t=e.a,a=e.b,u=e.c,i=e.d,c=e.e;switch(f(yt,r,a)){case 0:return l(wt,t,a,u,s(xt,r,n,i),c);case 1:return l($t,t,a,n,i,c);default:return l(wt,t,a,u,i,s(xt,r,n,c))}}),kt=t(function(r,n,e){var t=s(xt,r,n,e);return-1!==t.$||t.a?t:l($t,1,t.b,t.c,t.d,t.e)}),jt=e(function(r,n){return s(kt,r,0,n)}),Lt=function(r){return f(tt,function(r){var n=r.b,e=r.c,t="import "+r.a,a=ge(e)>0?" exposing ("+f(je,", ",e)+")":"";return f(je,"",$([t,""===n?"":" as "+n,a]))},st((n=s(Dn,jt,mt,f(tt,lt,f(dt,bt,r))),f(pt,ht,s(Bn,t(function(r,n,e){return f(Rn,r,e)}),v,n)))));var n},At=t(function(r,n,e){return n(r(e))}),qt=e(function(r,n){return n.b?s(et,Rn,n,r):r}),Et=function(r){return s(et,qt,v,r)},Mt=e(function(r,n){return Et(f(tt,r,n))}),St=function(r){return r.b},Tt=function(r){switch(r.$){case 0:return f(Rn,r.a,f(Mt,Tt,r.b));case 1:return v;case 2:case 3:return f(Mt,Tt,r.a);default:var n=r.a;return f(Mt,f(At,St,Tt),n)}},Ct=function(r){switch(r.$){case 0:return f(Rn,r.a,f(Mt,Ct,r.b));case 1:return f(Mt,function(r){return Ct(r.b)},r.a);case 2:case 3:return f(Mt,Ct,r.a);default:return v}},zt=Mt(function(r){switch(r.$){case 0:return f(Mt,function(r){return f(Mt,Ct,r.b)},r.c);case 1:return Ct(r.c);case 3:return v;default:var n=r.d;return C(f(Mt,Ct,r.b),Tt(n))}}),Bt=function(r){return n={di:Ke(r),dm:Mn,dq:$([(s="style",{$:0,a:s})]),ac:$(["Style"])},t=(e={di:n.di,dm:n.dm,dq:n.dq,dE:Lt(zt(n.di)),ac:f(je,".",n.ac)}).ac,a=e.dq,u=e.dm,c=e.di,o=C(f(je,"\n",i=e.dE),ge(i)>0?"\n\n\n":""),C("module "+t+" exposing ("+f(je,", ",f(tt,ft,a))+")\n\n",C(u.$?"":"{-|"+u.a+"-}\n\n",C(o,f(je,"",f(tt,ot,c)))));var n,e,t,a,u,i,c,o,s},Rt=$(["Mapbox","Layer"]),Nt=t(function(r,n,e){return{$:2,a:r,b:n,c:e}}),_t=function(r){var n=r.aw;return s(Nt,r.ao,r.aj,n.$?Ue(r.ac):f(Oe,n.a,r.ac))},Pt=function(r){return _t({aj:"Layer",ao:Rt,ac:r,aw:Mn})},Ot=function(r){return{$:1,a:r}},Ft=function(r){return{$:0,a:r}},Jt=function(r){return r.$?Ot(Me(r.a)):Ft(r.a)},It=er,Ut=Q,Xt=e(function(r,n){if(n.b){var t=n.b;return f(Rn,n.a,s(et,e(function(n,e){return f(Rn,r,f(Rn,n,e))}),v,t))}return v}),Dt=function(r){return f(je,"",r)},Gt=function(r){return!r},Kt=function(r){return S(r.toLowerCase())},Ht=J,Wt=function(r){return s(Ht,Rn,v,r)},Yt=de,Qt=t(function(r,n,t){var a,u=e(function(n,e){return T(e,!e.aa&&e.o||e.aa&&r?{q:f(Rn,(t=n,S(t.toUpperCase())),e.q)}:{q:f(Rn,Kt(n),e.q)});var t}),i=e(function(r,n){return T(n,r?{q:v,X:f(Rn,(e=Gn(n.q),y(e).join("")),n.X)}:{q:n.q,X:n.X});var e}),c=e(function(r,n){return T(n,{l:0,o:!1})}),o=e(function(r,e){return t=f(u,r,function(){switch(e.l){case 0:return f(i,!e.ab,T(e,{ab:!1,l:1,o:n}));case 1:case 2:return T(e,{l:2,o:!1});default:return f(i,!0,T(e,{l:1,o:n}))}}()),T(t,{aa:!1});var t}),b=e(function(r,e){return t=f(u,r,function(){switch(e.l){case 0:return f(i,!e.ab,T(e,{ab:!1,l:1,o:n}));case 1:case 2:default:return T(e,{l:3,o:!1})}}()),T(t,{aa:!1});var t}),l=e(function(r,n){return Yt(r)?f(o,r,n):function(r){return de(r)||le(r)||pe(r)}(r)?f(b,r,n):f(c,r,n)});return(a=s(Dn,function(r){return function(n){return f(l,r,n)}},{q:v,aa:!0,ab:!0,l:0,o:!1,X:v},Wt(t)),k(a.q,v)?a:f(i,!0,a)).X}),Vt=a(function(r,n,e,t){return Dt(f(Xt,r,Gn(s(Qt,n,e,t))))}),Zt=function(r){return b(Vt,"",!1,!0,r)},ra=t(function(r,n,e){return ae(f(Ut,_e(Pt(Zt(r))),Jt(f(It,n,e))))}),na=$(["Mapbox","Expression"]),ea=e(function(r,n){return f(Pe,r,Ue(n))})(na),ta=function(r){return f(Ne,r,v)},aa=ta(ea("false")),ua=ta(ea("true")),ia=f(Ut,function(r){return r?ua:aa},{$:3}),ca=e(function(r){return r}),oa=e(function(r,n){return{$:1,a:r,b:n}}),fa=t(function(r,n,e){return{$:0,a:r,b:n,c:e}}),sa=t(function(r,n,e){var t=n,a=e;return function(n){var e=t(n);if(1===e.$)return f(oa,e.a,e.b);var u=e.a,i=e.b,c=a(e.c);if(1===c.$){var o=c.a;return f(oa,u||o,c.b)}o=c.a;var b=c.c;return s(fa,u||o,f(r,i,c.b),b)}}),ba=e(function(r,n){return s(sa,ca,r,n)}),la={$:0},da=e(function(r,n){return{$:2,a:r,b:n}}),ha=t(function(r,n,e){r:for(;;){if(e.b){var t=e.b,a=(0,e.a)(r);if(a.$){var u;if((u=a).a)return u;r=r,n=f(da,n,u.b),e=t;continue r}return a}return f(oa,!1,n)}}),pa=function(r){return function(n){return s(ha,n,la,r)}},va=function(r){return function(n){return s(fa,!1,r,n)}},ga=e(function(r,n){return{$:0,a:r,b:n}}),ma=function(r){return""===r},$a=e(function(r,n){return{$:1,a:r,b:n}}),ya=a(function(r,n,e,t){return{bM:n,de:t,cd:e,cl:r}}),wa=e(function(r,n){return f($a,la,b(ya,r.cl,r.bM,n,r.c))}),xa=Br,ka=function(r){return function(r){var n=r.a,e=r.b,t=!ma(n);return function(r){var a=l(xa,n,r.b,r.cl,r.bM,r.a),u=a.a,i=a.b,c=a.c;return k(u,-1)?f(oa,!1,f(wa,r,e)):s(fa,t,0,{bM:c,c:r.c,d:r.d,b:u,cl:i,a:r.a})}}(f(ga,r,{$:8,a:r}))},ja=pa($([f(ba,va(0),ka("0")),f(ba,va(1),ka("1")),f(ba,va(2),ka("2")),f(ba,va(3),ka("3")),f(ba,va(4),ka("4")),f(ba,va(5),ka("5")),f(ba,va(6),ka("6")),f(ba,va(7),ka("7")),f(ba,va(8),ka("8")),f(ba,va(9),ka("9")),f(ba,va(10),ka("A")),f(ba,va(11),ka("B")),f(ba,va(12),ka("C")),f(ba,va(13),ka("D")),f(ba,va(14),ka("E")),f(ba,va(15),ka("F")),f(ba,va(10),ka("a")),f(ba,va(11),ka("b")),f(ba,va(12),ka("c")),f(ba,va(13),ka("d")),f(ba,va(14),ka("e")),f(ba,va(15),ka("f"))])),La=e(function(r,n){return(r<<4)+n}),Aa=e(function(r,n){return s(sa,Yn,r,n)}),qa=f(Aa,f(Aa,f(Aa,f(Aa,f(ba,va(a(function(r,n,e,t){if(t.$)return{aV:1,a_:f(La,e,e),a3:f(La,n,n),bu:f(La,r,r)};var a=t.a,u=a.a;return{aV:1,a_:f(La,a.b,a.c),a3:f(La,e,u),bu:f(La,r,n)}})),ka("#")),ja),ja),ja),pa($([f(Aa,f(Aa,f(Aa,va(t(function(r,n,e){return ae(M(r,n,e))})),ja),ja),ja),va(Mn)]))),Ea=P,Ma={$:5},Sa=Pr,Ta=Or,Ca=X,za=e(function(r,n){return{bM:n.bM+(r-n.b),c:n.c,d:n.d,b:r,cl:n.cl,a:n.a}}),Ba=_r,Ra=Nr,Na=e(function(r,n){if(s(Ra,101,r,n)||s(Ra,69,r,n)){var e=r+1,t=s(Ra,43,e,n)||s(Ra,45,e,n)?e+1:e,a=f(Ba,t,n);return k(t,a)?-a:a}return r}),_a=e(function(r,n){return f(Na,s(Ra,46,r,n)?f(Ba,r+1,n):r,n)}),Pa=u(function(r,n,e,t,a){var u=t.a,i=t.b;if(1===n.$)return f(oa,!0,f(wa,a,n.a));var c=n.a;return k(e,u)?f(oa,0>L(a.b,e),f(wa,a,r)):s(fa,!0,c(i),f(za,u,a))}),Oa=a(function(r,n,e,t){return f($a,la,b(ya,r,n,e,t))}),Fa=i(function(r,n,e,t,a,u){var i=a.a,c=f(_a,i,u.a);if(0>c)return f(oa,!0,b(Oa,u.cl,u.bM-(c+u.b),r,u.c));if(k(u.b,c))return f(oa,!1,f(wa,u,n));if(k(i,c))return l(Pa,r,e,u.b,a,u);if(1===t.$)return f(oa,!0,f(wa,u,r));var o=t.a,d=function(r){if(0===r.length||/[\sxbo]/.test(r))return Mn;var n=+r;return n==n?ae(n):Mn}(s(Ca,u.b,c,u.a));return 1===d.$?f(oa,!0,f(wa,u,r)):s(fa,!0,o(d.a),f(za,c,u))}),Ja=function(r){return function(n){if(s(Ra,48,n.b,n.a)){var e=n.b+1,t=e+1;return s(Ra,120,e,n.a)?l(Pa,r.dL,r.dy,t,f(Ta,t,n.a),n):s(Ra,111,e,n.a)?l(Pa,r.dL,r.dR,t,s(Sa,8,t,n.a),n):s(Ra,98,e,n.a)?l(Pa,r.dL,r.cW,t,s(Sa,2,t,n.a),n):d(Fa,r.dL,r.bQ,r.dJ,r.dt,E(e,0),n)}return d(Fa,r.dL,r.bQ,r.dJ,r.dt,s(Sa,10,n.b,n.a),n)}},Ia=f(e(function(r,n){return Ja({cW:ue(n),bQ:r,dt:ie(ht),dy:ue(n),dJ:ie(Fn),dL:n,dR:ue(n)})}),Ma,Ma),Ua=e(function(r,n){var e=n;return function(n){var t=e(n);if(t.$)return f(oa,t.a,t.b);var a=t.c;return s(fa,t.a,r(t.b),a)}}),Xa=f(Ua,Ea,Ia),Da=a(function(r,n,e,t){return{aV:t,a_:e,a3:n,bu:r}}),Ga=a(function(r,n,e,t){var a=M(r/360,n/100,e/100),u=a.a,i=a.b,c=a.c,o=c>.5?c+i-c*i:c*(i+1),f=2*c-o,s=function(r){var n=0>r?r+1:r>1?r-1:r;return 1>6*n?f+(o-f)*n*6:1>2*n?o:2>3*n?f+(o-f)*(2/3-n)*6:f},l=s(u-1/3),d=s(u),h=s(u+1/3);return b(Da,Qn(255*h),Qn(255*d),Qn(255*l),t)}),Ka=f(ba,f(Ua,Ea,Ia),ka("%")),Ha=Rr,Wa=function(r){return function(r){var n=r.a,e=r.b,t=!ma(n);return function(r){var a=l(xa,n,r.b,r.cl,r.bM,r.a),u=a.a,i=a.b,c=a.c;return k(u,-1)||s(Ha,function(r){return ve(r)||"_"===r},u,r.a)>=0?f(oa,!1,f(wa,r,e)):s(fa,t,0,{bM:c,c:r.c,d:r.d,b:u,cl:i,a:r.a})}}(f(ga,r,{$:9,a:r}))},Ya=u(function(r,n,e,t,a){for(;;){var u=s(Ha,r,n,a.a);if(k(u,-1))return s(fa,0>L(a.b,n),0,{bM:t,c:a.c,d:a.d,b:n,cl:e,a:a.a});k(u,-2)?(r=r,n+=1,e+=1,t=1,a=a):(r=r,n=u,e=e,t+=1,a=a)}}),Qa=(qn=function(r){return" "===r||"\n"===r||"\r"===r},function(r){return l(Ya,qn,r.b,r.cl,r.bM,r)}),Va=f(Aa,f(Aa,f(Aa,f(Aa,f(ba,f(ba,va(Ga),pa($([Wa("hsla"),Wa("hsl")]))),ka("(")),f(ba,f(ba,f(ba,Xa,Qa),ka(",")),Qa)),f(ba,f(ba,f(ba,Ka,Qa),ka(",")),Qa)),Ka),f(ba,pa($([f(Aa,f(ba,f(ba,va(ht),ka(",")),Qa),Ia),va(1)])),ka(")"))),Za=function(r){switch(Kt(r)){case"0":return ae(0);case"1":return ae(1);case"2":return ae(2);case"3":return ae(3);case"4":return ae(4);case"5":return ae(5);case"6":return ae(6);case"7":return ae(7);case"8":return ae(8);case"9":return ae(9);case"a":return ae(10);case"b":return ae(11);case"c":return ae(12);case"d":return ae(13);case"e":return ae(14);case"f":return ae(15);default:return Mn}},ru=t(function(r,n,e){return 1===n.$?Mn:1===e.$?Mn:ae(f(r,n.a,e.a))}),nu=e(function(r,n){return s(ru,e(function(r,n){return(r<<4)+n}),Za(r),Za(n))}),eu=function(r){return n={$:12,a:r},function(r){return f(oa,!1,f(wa,r,n))};var n},tu=u(function(r,n,e,t,a){return 1===n.$?Mn:1===e.$?Mn:1===t.$?Mn:1===a.$?Mn:ae(b(r,n.a,e.a,t.a,a.a))}),au=a(function(r,n,e,t){var u,i=r.a,c=r.b,o=n.a,s=n.b,d=e.a,h=e.b,p=t.a,v=t.b;return(u=l(tu,a(function(r,n,e,t){return b(Da,r,n,e,t/255)}),f(nu,i,c),f(nu,o,s),f(nu,d,h),f(nu,p,v))).$?eu("something went wrong"):va(u.a)}),uu=function(r){var n=Wt(r);r:for(;;){if(n.b&&n.b.b&&n.b.b.b){if(n.b.b.b.b){if(n.b.b.b.b.b){if(n.b.b.b.b.b.b){if(n.b.b.b.b.b.b.b){if(n.b.b.b.b.b.b.b.b){if(n.b.b.b.b.b.b.b.b.b){if("#"!==n.a||n.b.b.b.b.b.b.b.b.b.b)break r;var e=n.b,t=e.b,a=t.b,u=(w=a.a,a.b),i=(k=u.a,u.b),c=(L=i.a,i.b),o=(A=c.a,c.b),f=o.a,s=o.b.a;return b(au,E(e.a,t.a),E(w,k),E(L,A),E(f,s))}var l=n.b,d=l.b,h=(w=d.a,d.b),p=(k=h.a,h.b),v=(L=p.a,p.b),g=(A=v.a,v.b);return f=g.a,s=g.b.a,b(au,E(n.a,l.a),E(w,k),E(L,A),E(f,s))}if("#"===n.a){var m=n.b,$=m.b,y=$.b,w=y.a,x=y.b,k=x.a,j=x.b,L=j.a,A=j.b.a;return b(au,E(m.a,$.a),E(w,k),E(L,A),E("f","f"))}break r}var q=n.b,M=q.b,S=(w=M.a,M.b),T=(k=S.a,S.b);L=T.a,A=T.b.a;return b(au,E(n.a,q.a),E(w,k),E(L,A),E("f","f"))}if("#"===n.a){var C=n.b,z=C.b,B=(_=z.a,z.b);return P=B.a,J=B.b.a,b(au,E(I=C.a,I),E(_,_),E(P,P),E(J,J))}break r}if("#"===n.a){var R=n.b,N=R.b,_=N.a,P=N.b.a;return b(au,E(I=R.a,I),E(_,_),E(P,P),E("f","f"))}var O=n.b,F=(_=O.a,O.b),J=(P=F.a,F.b.a);return b(au,E(I=n.a,I),E(_,_),E(P,P),E(J,J))}var I,U=n.b;_=U.a,P=U.b.a;return b(au,E(I=n.a,I),E(_,_),E(P,P),E("f","f"))}break r}return eu("Invalid color")},iu=pa($([f(ba,uu("#000000"),Wa("black")),f(ba,uu("#c0c0c0"),Wa("silver")),f(ba,uu("#808080"),Wa("gray")),f(ba,uu("#ffffff"),Wa("white")),f(ba,uu("#800000"),Wa("maroon")),f(ba,uu("#ff0000"),Wa("red")),f(ba,uu("#800080"),Wa("purple")),f(ba,uu("#ff00ff"),Wa("fuchsia")),f(ba,uu("#008000"),Wa("green")),f(ba,uu("#00ff00"),Wa("lime")),f(ba,uu("#808000"),Wa("olive")),f(ba,uu("#ffff00"),Wa("yellow")),f(ba,uu("#000080"),Wa("navy")),f(ba,uu("#0000ff"),Wa("blue")),f(ba,uu("#008080"),Wa("teal")),f(ba,uu("#00ffff"),Wa("aqua")),f(ba,uu("#ffa500"),Wa("orange")),f(ba,uu("#f0f8ff"),Wa("aliceblue")),f(ba,uu("#faebd7"),Wa("antiquewhite")),f(ba,uu("#7fffd4"),Wa("aquamarine")),f(ba,uu("#f0ffff"),Wa("azure")),f(ba,uu("#f5f5dc"),Wa("beige")),f(ba,uu("#ffe4c4"),Wa("bisque")),f(ba,uu("#ffebcd"),Wa("blanchedalmond")),f(ba,uu("#8a2be2"),Wa("blueviolet")),f(ba,uu("#a52a2a"),Wa("brown")),f(ba,uu("#deb887"),Wa("burlywood")),f(ba,uu("#5f9ea0"),Wa("cadetblue")),f(ba,uu("#7fff00"),Wa("chartreuse")),f(ba,uu("#d2691e"),Wa("chocolate")),f(ba,uu("#ff7f50"),Wa("coral")),f(ba,uu("#6495ed"),Wa("cornflowerblue")),f(ba,uu("#fff8dc"),Wa("cornsilk")),f(ba,uu("#dc143c"),Wa("crimson")),f(ba,uu("#00ffff"),Wa("cyan")),f(ba,uu("#00008b"),Wa("darkblue")),f(ba,uu("#008b8b"),Wa("darkcyan")),f(ba,uu("#b8860b"),Wa("darkgoldenrod")),f(ba,uu("#a9a9a9"),Wa("darkgray")),f(ba,uu("#006400"),Wa("darkgreen")),f(ba,uu("#a9a9a9"),Wa("darkgrey")),f(ba,uu("#bdb76b"),Wa("darkkhaki")),f(ba,uu("#8b008b"),Wa("darkmagenta")),f(ba,uu("#556b2f"),Wa("darkolivegreen")),f(ba,uu("#ff8c00"),Wa("darkorange")),f(ba,uu("#9932cc"),Wa("darkorchid")),f(ba,uu("#8b0000"),Wa("darkred")),f(ba,uu("#e9967a"),Wa("darksalmon")),f(ba,uu("#8fbc8f"),Wa("darkseagreen")),f(ba,uu("#483d8b"),Wa("darkslateblue")),f(ba,uu("#2f4f4f"),Wa("darkslategray")),f(ba,uu("#2f4f4f"),Wa("darkslategrey")),f(ba,uu("#00ced1"),Wa("darkturquoise")),f(ba,uu("#9400d3"),Wa("darkviolet")),f(ba,uu("#ff1493"),Wa("deeppink")),f(ba,uu("#00bfff"),Wa("deepskyblue")),f(ba,uu("#696969"),Wa("dimgray")),f(ba,uu("#696969"),Wa("dimgrey")),f(ba,uu("#1e90ff"),Wa("dodgerblue")),f(ba,uu("#b22222"),Wa("firebrick")),f(ba,uu("#fffaf0"),Wa("floralwhite")),f(ba,uu("#228b22"),Wa("forestgreen")),f(ba,uu("#dcdcdc"),Wa("gainsboro")),f(ba,uu("#f8f8ff"),Wa("ghostwhite")),f(ba,uu("#ffd700"),Wa("gold")),f(ba,uu("#daa520"),Wa("goldenrod")),f(ba,uu("#adff2f"),Wa("greenyellow")),f(ba,uu("#808080"),Wa("grey")),f(ba,uu("#f0fff0"),Wa("honeydew")),f(ba,uu("#ff69b4"),Wa("hotpink")),f(ba,uu("#cd5c5c"),Wa("indianred")),f(ba,uu("#4b0082"),Wa("indigo")),f(ba,uu("#fffff0"),Wa("ivory")),f(ba,uu("#f0e68c"),Wa("khaki")),f(ba,uu("#e6e6fa"),Wa("lavender")),f(ba,uu("#fff0f5"),Wa("lavenderblush")),f(ba,uu("#7cfc00"),Wa("lawngreen")),f(ba,uu("#fffacd"),Wa("lemonchiffon")),f(ba,uu("#add8e6"),Wa("lightblue")),f(ba,uu("#f08080"),Wa("lightcoral")),f(ba,uu("#e0ffff"),Wa("lightcyan")),f(ba,uu("#fafad2"),Wa("lightgoldenrodyellow")),f(ba,uu("#d3d3d3"),Wa("lightgray")),f(ba,uu("#90ee90"),Wa("lightgreen")),f(ba,uu("#d3d3d3"),Wa("lightgrey")),f(ba,uu("#ffb6c1"),Wa("lightpink")),f(ba,uu("#ffa07a"),Wa("lightsalmon")),f(ba,uu("#20b2aa"),Wa("lightseagreen")),f(ba,uu("#87cefa"),Wa("lightskyblue")),f(ba,uu("#778899"),Wa("lightslategray")),f(ba,uu("#778899"),Wa("lightslategrey")),f(ba,uu("#b0c4de"),Wa("lightsteelblue")),f(ba,uu("#ffffe0"),Wa("lightyellow")),f(ba,uu("#32cd32"),Wa("limegreen")),f(ba,uu("#faf0e6"),Wa("linen")),f(ba,uu("#ff00ff"),Wa("magenta")),f(ba,uu("#66cdaa"),Wa("mediumaquamarine")),f(ba,uu("#0000cd"),Wa("mediumblue")),f(ba,uu("#ba55d3"),Wa("mediumorchid")),f(ba,uu("#9370db"),Wa("mediumpurple")),f(ba,uu("#3cb371"),Wa("mediumseagreen")),f(ba,uu("#7b68ee"),Wa("mediumslateblue")),f(ba,uu("#00fa9a"),Wa("mediumspringgreen")),f(ba,uu("#48d1cc"),Wa("mediumturquoise")),f(ba,uu("#c71585"),Wa("mediumvioletred")),f(ba,uu("#191970"),Wa("midnightblue")),f(ba,uu("#f5fffa"),Wa("mintcream")),f(ba,uu("#ffe4e1"),Wa("mistyrose")),f(ba,uu("#ffe4b5"),Wa("moccasin")),f(ba,uu("#ffdead"),Wa("navajowhite")),f(ba,uu("#fdf5e6"),Wa("oldlace")),f(ba,uu("#6b8e23"),Wa("olivedrab")),f(ba,uu("#ff4500"),Wa("orangered")),f(ba,uu("#da70d6"),Wa("orchid")),f(ba,uu("#eee8aa"),Wa("palegoldenrod")),f(ba,uu("#98fb98"),Wa("palegreen")),f(ba,uu("#afeeee"),Wa("paleturquoise")),f(ba,uu("#db7093"),Wa("palevioletred")),f(ba,uu("#ffefd5"),Wa("papayawhip")),f(ba,uu("#ffdab9"),Wa("peachpuff")),f(ba,uu("#cd853f"),Wa("peru")),f(ba,uu("#ffc0cb"),Wa("pink")),f(ba,uu("#dda0dd"),Wa("plum")),f(ba,uu("#b0e0e6"),Wa("powderblue")),f(ba,uu("#bc8f8f"),Wa("rosybrown")),f(ba,uu("#4169e1"),Wa("royalblue")),f(ba,uu("#8b4513"),Wa("saddlebrown")),f(ba,uu("#fa8072"),Wa("salmon")),f(ba,uu("#f4a460"),Wa("sandybrown")),f(ba,uu("#2e8b57"),Wa("seagreen")),f(ba,uu("#fff5ee"),Wa("seashell")),f(ba,uu("#a0522d"),Wa("sienna")),f(ba,uu("#87ceeb"),Wa("skyblue")),f(ba,uu("#6a5acd"),Wa("slateblue")),f(ba,uu("#708090"),Wa("slategray")),f(ba,uu("#708090"),Wa("slategrey")),f(ba,uu("#fffafa"),Wa("snow")),f(ba,uu("#00ff7f"),Wa("springgreen")),f(ba,uu("#4682b4"),Wa("steelblue")),f(ba,uu("#d2b48c"),Wa("tan")),f(ba,uu("#d8bfd8"),Wa("thistle")),f(ba,uu("#ff6347"),Wa("tomato")),f(ba,uu("#40e0d0"),Wa("turquoise")),f(ba,uu("#ee82ee"),Wa("violet")),f(ba,uu("#f5deb3"),Wa("wheat")),f(ba,uu("#f5f5f5"),Wa("whitesmoke")),f(ba,uu("#9acd32"),Wa("yellowgreen")),f(ba,uu("#663399"),Wa("rebeccapurple")),f(ba,va(b(Da,0,0,0,0)),Wa("transparent"))])),cu={$:1},ou=f(e(function(r,n){return Ja({cW:ue(n),bQ:r,dt:ue(n),dy:ue(n),dJ:ie(ht),dL:n,dR:ue(n)})}),cu,cu),fu=f(Aa,f(Aa,f(Aa,f(Aa,f(ba,f(ba,va(Da),pa($([Wa("rgba"),Wa("rgb")]))),ka("(")),f(ba,f(ba,f(ba,ou,Qa),ka(",")),Qa)),f(ba,f(ba,f(ba,ou,Qa),ka(",")),Qa)),ou),f(ba,pa($([f(Aa,f(ba,f(ba,va(ht),ka(",")),Qa),Ia),va(1)])),ka(")"))),su=(En={$:10},function(r){return k(Qe(r.a),r.b)?s(fa,!1,0,r):f(oa,!1,f(wa,r,En))}),bu=f(ba,pa($([iu,Va,fu,qa])),su),lu=e(function(r,n){return n.$?ue(r(n.a)):ie(n.a)}),du=function(){return"TODO deadEndsToString"},hu=t(function(r,n,e){return{bM:n,cd:e,cl:r}}),pu=function(r){return s(hu,r.cl,r.bM,r.cd)},vu=e(function(r,n){r:for(;;)switch(r.$){case 0:return n;case 1:var e=r.b;r=r.a,n=f(Rn,e,n);continue r;default:var t=r.b;r=r.a,n=f(vu,t,n);continue r}}),gu=e(function(r,n){var e=r({bM:1,c:v,d:1,b:0,cl:1,a:n});return e.$?ue(f(vu,e.b,v)):ie(e.b)}),mu=e(function(r,n){var e=f(gu,r,n);return e.$?ue(f(tt,pu,e.a)):ie(e.a)}),$u=function(r){return _t({aj:"E",ao:na,ac:r,aw:Mn})},yu=f(At,$u,ta),wu=_e(ea("str")),xu=e(function(r,n){return f(Ne,r,n)}),ku=function(r){return{$:1,a:r}},ju=G,Lu=function(r){return ku(ju(r))},Au=function(r){return ku(ke(r))},qu=t(function(r,n,e){return f(je,n,f(Le,r,e))}),Eu=function(r){return ku('"'+s(qu,'"','\\"',r)+'"')},Mu=function(r){switch(r){case"map":return yu("anchorMap");case"viewport":return yu("anchorViewport");case"auto":return yu("anchorAuto");case"center":return yu("positionCenter");case"left":return yu("positionLeft");case"right":return yu("positionRight");case"top":return yu("positionTop");case"bottom":return yu("positionBottom");case"topRight":return yu("positionTopRight");case"topLeft":return yu("positionTopLeft");case"bottomLeft":return yu("positionBottomLeft");case"bottomRight":return yu("positionBottomRight");case"none":return yu("textFitNone");case"width":return yu("textFitWidth");case"height":return yu("textFitHeight");case"both":return yu("textFitBoth");case"butt":return yu("lineCapButt");case"round":return yu("lineCapRound");case"square":return yu("lineCapSquare");case"bevel":return yu("lineJoinBevel");case"miter":return yu("lineJoinMiter");case"point":return yu("symbolPlacementPoint");case"line-center":return yu("symbolPlacementLineCenter");case"line":return yu("symbolPlacementLine");case"uppercase":return yu("textTransformUppercase");case"lowercase":return yu("textTransformLowercase");case"linear":return yu("rasterResamplingLinear");case"nearest":return yu("rasterResamplingNearest");default:var n=f(lu,du,f(mu,bu,r));if(n.$)return wu(Eu(r));var e=n.a.bu,t=n.a.a3,a=n.a.a_,u=n.a.aV;return f(xu,$u("rgba"),$([Au(e),Au(t),Au(a),Lu(u)]))}},Su=function(r){return{$:7,b:r}},Tu=function(r){if(r.b&&r.b.b){var n=r.a,e=r.b,t=e.a,a=e.b,u=f(It,Su(ze),n);return 1===u.$?f(Rn,n,f(Rn,t,a)):C(f(Mt,function(r){return $([r,t])},u.a),Tu(a))}return r},Cu=V,zu=f(et,Cu(Rn),Ft(v)),Bu=e(function(r,n){return Jt(f(It,r,n))}),Ru=Y,Nu=function(r){return f(Ru,function(n){if(n.b){var e=n.b;return zu(f(tt,Bu(r),e))}return Ot("Can't get tail of empty")},Su(ze))},_u=e(function(r,n){return{$:1,a:r,b:n}}),Pu=e(function(r,n){return f(_u,r,Ue(n))}),Ou=function(r){return f(_e,f(Pu,$(["Debug"]),"todo"),Eu(r))},Fu=f(Ut,function(r){return Ou("The expression "+f(qe,0,r)+" is not yet supported")},ze),Ju=_e(ea("float")),Iu=_e($u("floats")),Uu=_e(ea("int")),Xu=t(function(r,n,e){return f(Ne,r,$([n,e]))}),Du=function(r){return{$:0,a:Ue(r)}},Gu=e(function(r,n){if(n.b){var e=n.a,t=n.b;return s(Xu,Du("|>"),e,f(xu,$u(r),t))}return Ou("Wrong number of arguments passed to E."+r)}),Ku=e(function(r,n){if(n.b){var t=n.a,a=n.b;return s(Dn,e(function(r,n){return s(Xu,Du("|>"),n,r)}),t,f(tt,_e($u(r)),a))}return Ou("Wrong number of arguments passed to E."+r)}),Hu=function(r){return{$:2,a:r}},Wu=e(function(r,n){return function(r){return{$:3,a:r}}($([r,n]))}),Yu=e(function(r,n){r:for(;;){if(r>0){if(n.b){r-=1,n=n.b;continue r}return n}return n}}),Qu=function(r){return r.toLowerCase()},Vu={$:4},Zu=H,ri={$:2},ni=Z,ei=function(r){return{$:15,g:r}},ti={$:6},ai=function(r){switch(r){case"literal":return f(Zu,1,ei($([f(Ut,function(r){return f(xu,$u("strings"),$([Hu(f(tt,Eu,r))]))},Su(ti)),f(Ut,function(r){return f(xu,$u("floats"),$([Hu(f(tt,Lu,r))]))},Su(Vu))])));case"match":return ei($([f(Ru,ui(!0),f(Zu,2,ti)),f(Ru,ui(!1),f(Zu,2,Vu)),f(Ru,ui(!0),f(Zu,2,Su(ti))),f(Ru,ui(!1),f(Zu,2,Su(Vu)))]));case"exponential":return f(Ut,function(r){return f(xu,$u("Exponential"),$([Lu(r)]))},f(Zu,1,Vu));case"interpolate":return b(ni,t(function(r,n,e){return f(Gu,"interpolate",f(Rn,e,f(Rn,r,n)))}),f(Zu,1,ci()),f(Ru,f(ii,f(Ut,Lu,Vu),v),f(Ut,Yu(2),Nu(ze))),f(Zu,2,ci()));case"step":return b(ni,t(function(r,n,e){return f(Gu,"step",f(Rn,r,f(Rn,n,e)))}),f(Zu,1,ci()),f(Zu,2,ci()),f(Ru,f(ii,f(Ut,Lu,Vu),v),f(Ut,Yu(2),Nu(ze))));case"case":return f(Ut,xu($u("conditionally")),f(Ru,f(ii,ci(),v),Nu(ze)));default:var n=f(Ut,function(n){switch(r){case"==":return f(Gu,"isEqual",n);case"!=":return f(Gu,"notEqual",n);case"!has":return Ou("!has is not supported");case"!in":return Ou("!in is not supported");case"in":return Ou("in is not supported");case">=":return f(Gu,"greaterThanOrEqual",n);case">":return f(Gu,"greaterThan",n);case"<=":return f(Gu,"lessThanOrEqual",n);case"<":return f(Gu,"lessThan",n);case"concat":return f(Ku,"append",n);case"linear":return f(xu,$u("Linear"),n);case"rgb":return f(xu,$u("makeRGBColor"),n);case"rgba":return f(xu,$u("makeRGBAColor"),n);case"to-rgba":return f(xu,$u("rgbaChannels"),n);case"-":return f(Ku,"minus",n);case"*":return f(Ku,"multiply",n);case"+":return f(Ku,"plus",n);case"/":return f(Ku,"divideBy",n);case"%":return f(Ku,"modBy",n);case"^":return f(Ku,"raiseBy",n);case"get":return 1===ge(n)?f(xu,$u("getProperty"),n):f(xu,$u("get"),n);case"all":return f(_e,$u("all"),Hu(n));case"any":return f(_e,$u("any"),Hu(n));default:return f(xu,$u(Zt(r)),n)}},Nu(ci()));return k(Qu(r),r)?n:ei($([f(Ut,function(r){return f(xu,$u("strings"),$([Hu(f(tt,Eu,r))]))},Su(ti)),n]))}},ui=e(function(r){return f(Ru,function(n){if(n.b){var t=n.a,a=n.b;return s(Cu,e(function(n,e){return f(Gu,r?"matchesStr":"matchesFloat",f(Rn,n,e))}),f(Bu,ci(),t),s(ii,r?f(Ut,Eu,ti):f(Ut,Lu,Vu),v,Tu(a)))}return Fu},Nu(ze))}),ii=t(function(r,n,e){r:for(;;){if(e.b){if(e.b.b){var t=e.b,a=t.a,u=t.b,i=f(Rn,s(Cu,Wu,f(Bu,r,e.a),f(Bu,ci(),a)),n);r=r,n=i,e=u;continue r}var c=e.a;return zu($([f(Ut,Hu,zu(Gn(n))),f(Bu,ci(),c)]))}return zu($([f(Ut,Hu,zu(Gn(n)))]))}});function ci(){return ei($([f(Ut,Mu,ti),ia,f(Ut,f(At,Lu,Ju),Vu),f(Ut,f(At,Au,Uu),ri),f(Ru,ai,f(Zu,0,ti)),f(Ru,ca(f(Ut,f(At,tt(Au),f(At,Hu,Iu)),Su(ri))),f(Zu,0,ri)),f(Ru,ca(f(Ut,f(At,tt(Lu),f(At,Hu,Iu)),Su(Vu))),f(Zu,0,Vu)),Fu]))}var oi=ci();ci=function(){return oi};var fi=e(function(r,n){return ei($([n,Ft(r)]))}),si=function(r){return $([r])};function bi(){var r=Su(ei($([f(Ut,f(At,Eu,wu),ti),f(Ut,f(At,Lu,Ju),Vu),ia]))),n=f(Zu,2,ei($([f(Ut,f(At,Eu,wu),ti),f(Ut,f(At,Lu,Ju),Vu),ia]))),t=f(Ut,function(r){switch(r){case"$type":return yu("geometryType");case"$id":return yu("id");default:return f(xu,$u("getProperty"),$([wu(Eu(r))]))}},f(Zu,1,ti)),a=function(r){return s(Cu,e(function(n,e){return f(Gu,r,$([n,e]))}),t,n)};return f(Ru,function(n){switch(n){case"all":return f(Ut,function(r){return f(xu,$u("all"),$([Hu(r)]))},Nu(bi()));case"any":return f(Ut,function(r){return f(xu,$u("any"),$([Hu(r)]))},Nu(bi()));case"none":return f(Ut,function(r){return f(xu,$u("all"),$([Hu(f(tt,function(r){return f(xu,$u("not"),$([r]))},r))]))},Nu(bi()));case"has":return f(Ut,function(r){return f(xu,$u("hasProperty"),$([wu(Eu(r))]))},f(Zu,1,ti));case"!has":return f(Ut,function(r){return f(xu,$u("not"),$([f(xu,$u("hasProperty"),$([wu(Eu(r))]))]))},f(Zu,1,ti));case"==":return a("isEqual");case"!=":return a("notEqual");case">":return a("greaterThan");case">=":return a("greaterThanOrEqual");case"<":return a("lessThan");case"<=":return a("lessThanOrEqual");case"in":return s(Cu,e(function(r,n){return f(xu,$u("any"),si(Hu(f(tt,function(n){return f(Gu,"isEqual",$([r,n]))},f(Yu,2,n)))))}),t,r);case"!in":return s(Cu,e(function(r,n){return f(xu,$u("all"),si(Hu(f(tt,function(n){return f(Gu,"notEqual",$([r,n]))},f(Yu,2,n)))))}),t,r);default:return Ot("not actually a legacy filter")}},f(Zu,0,ti))}var li=bi();bi=function(){return li};var di=t(function(r,n,e){var t=r(n);return t.$?e:f(Rn,t.a,e)}),hi=e(function(r,n){return s(et,di(r),v,n)}),pi=K,vi=function(r){return{$:12,b:r}},gi=f(Ru,f(At,hi(function(r){var n=r.a,e=r.b;switch(n){case"id":case"type":case"source":case"paint":case"layout":case"metadata":return Mn;case"source-layer":return s(ra,"sourceLayer",f(Ut,Eu,ti),e);case"minzoom":return s(ra,"minzoom",f(Ut,Lu,Vu),e);case"maxzoom":return s(ra,"maxzoom",f(Ut,Lu,Vu),e);case"filter":return s(ra,"filter",ei($([li,oi])),e);default:return s(ra,Zt(n),oi,e)}}),zu),b(ni,t(function(r,n,e){return C(r,C(n,e))}),vi(ze),f(fi,v,f(pi,"paint",vi(ze))),f(fi,v,f(pi,"layout",vi(ze))))),mi=a(function(r,n,e,t){return f(Ne,r,$([n,e,t]))}),$i=function(r){return b(ni,t(function(n,e,t){return b(mi,Pt(r),Eu(n),Eu(e),Hu(t))}),f(pi,"id",ti),f(pi,"source",ti),gi)},yi=f(Ru,function(r){switch(r){case"background":return s(Cu,e(function(r,n){return s(Xu,Pt("background"),Eu(r),Hu(n))}),f(pi,"id",ti),gi);case"fill":return $i("fill");case"symbol":return $i("symbol");case"line":return $i("line");case"raster":return $i("raster");case"circle":return $i("circle");case"fill-extrusion":return $i("fillExtrusion");case"heatmap":return $i("heatmap");case"hillshade":return $i("hillshade");default:return Ot("Layer type "+r+" not supported")}},f(pi,"type",ti)),wi=f(Ut,Hu,Su(yi)),xi=e(function(r,n){return Ft(ta(_t({aj:r,ao:$(["Mapbox",r]),ac:n,aw:Mn})))}),ki=f(xi,"Style","defaultLight"),ji=a(function(r,n,e,t){return function(r){return ei($([f(Ut,ae,r),Ft(Mn)]))}(f(pi,r,f(Ut,function(r){return f(_e,_t({aj:"Style",ao:Re,ac:n,aw:Mn}),t(r))},e)))}),Li=h(nr,i(function(r,n,e,t,a,u){return Hu(f(hi,ht,$([r,n,e,t,a,u])))}),b(ji,"sprite","sprite",ti,Eu),b(ji,"glyphs","glyphs",ti,Eu),b(ji,"name","name",ti,Eu),b(ji,"zoom","defaultZoomLevel",Vu,Lu),b(ji,"bearing","defaultBearing",Vu,Lu),b(ji,"pitch","defaultPitch",Vu,Lu)),Ai=$(["Mapbox","Source"]),qi=f(Ru,function(r){switch(r){case"vector":return f(Ut,function(r){return function(n){return s(Xu,_t({aj:"Source",ao:Ai,ac:"vectorFromUrl",aw:Mn}),Eu(n),Eu(r))}},f(pi,"url",ti));case"raster":return f(Ut,function(r){return function(n){return s(Xu,_t({aj:"Source",ao:Ai,ac:"rasterFromUrl",aw:Mn}),Eu(n),Eu(r))}},f(pi,"url",ti));default:return Ft(function(){return Ou("type "+r+" not yet supported")})}},f(pi,"type",ti)),Ei=f(Ut,Hu,f(Ut,tt(function(r){return(0,r.b)(r.a)}),vi(qi))),Mi=s(Cu,e(function(r,n){return Je($([E("duration",Au(r)),E("delay",Au(n))]))}),ei($([f(pi,"duration",ri),Ft(300)])),ei($([f(pi,"delay",ri),Ft(0)]))),Si=d(rr,u(function(r,n,e,t,a){return $([E("transition",r),E("light",n),E("layers",e),E("sources",t),E("misc",a)])}),ei($([f(pi,"transition",Mi),f(xi,"Style","defaultTransition")])),ei($([f(pi,"light",ki),f(xi,"Style","defaultLight")])),f(pi,"layers",wi),f(pi,"sources",Ei),Li),Ti=f(Ut,Bt,Si),Ci=function(r){switch(r.$){case 0:return"Invalid URL. Check the inputs to make sure that it is a valid https url or starts with mapbox://styles/";case 1:return"Request timed out. Try again later.";case 2:return"Network error. Are you online?";case 3:var n=r.a;switch(n.cq.M){case 401:return"An authentication error occurred. Check your key and try again.";case 404:return"Couldn't find that style";default:return n.cq.dP}default:return r.a}},zi=function(r){return{$:0,a:r}},Bi={$:0},Ri=e(function(r,n){r:for(;;){if(-2===n.$)return Mn;var e=n.c,t=n.d,a=n.e;switch(f(yt,r,n.b)){case 0:r=r,n=t;continue r;case 1:return ae(e);default:r=r,n=a;continue r}}}),Ni=function(r){if(-1===r.$&&-1===r.d.$&&-1===r.e.$){if(-1!==r.e.d.$||r.e.d.a){var n=r.d,e=r.e;return i=e.b,c=e.c,t=e.d,s=e.e,l($t,1,r.b,r.c,l($t,0,n.b,n.c,n.d,n.e),l($t,0,i,c,t,s))}var t,a=r.d,u=r.e,i=u.b,c=u.c,o=(t=u.d).d,f=t.e,s=u.e;return l($t,0,t.b,t.c,l($t,1,r.b,r.c,l($t,0,a.b,a.c,a.d,a.e),o),l($t,1,i,c,f,s))}return r},_i=function(r){if(-1===r.$&&-1===r.d.$&&-1===r.e.$){if(-1!==r.d.d.$||r.d.d.a){var n=r.d,e=r.e;return f=e.b,s=e.c,b=e.d,d=e.e,l($t,1,t=r.b,a=r.c,l($t,0,n.b,n.c,n.d,c=n.e),l($t,0,f,s,b,d))}var t=r.b,a=r.c,u=r.d,i=u.d,c=u.e,o=r.e,f=o.b,s=o.c,b=o.d,d=o.e;return l($t,0,u.b,u.c,l($t,1,i.b,i.c,i.d,i.e),l($t,1,t,a,c,l($t,0,f,s,b,d)))}return r},Pi=c(function(r,n,e,t,a,u,i){if(-1!==u.$||u.a){r:for(;;){if(-1===i.$&&1===i.a){if(-1===i.d.$){if(1===i.d.a)return _i(n);break r}return _i(n)}break r}return n}return l($t,e,u.b,u.c,u.d,l($t,0,t,a,u.e,i))}),Oi=function(r){if(-1===r.$&&-1===r.d.$){var n=r.a,e=r.b,t=r.c,a=r.d,u=a.d,i=r.e;if(1===a.a){if(-1!==u.$||u.a){var c=Ni(r);if(-1===c.$){var o=c.e;return l(wt,c.a,c.b,c.c,Oi(c.d),o)}return vt}return l($t,n,e,t,Oi(a),i)}return l($t,n,e,t,Oi(a),i)}return vt},Fi=e(function(r,n){if(-2===n.$)return vt;var e=n.a,t=n.b,a=n.c,u=n.d,i=n.e;if(0>L(r,t)){if(-1===u.$&&1===u.a){var c=u.d;if(-1!==c.$||c.a){var o=Ni(n);if(-1===o.$){var s=o.e;return l(wt,o.a,o.b,o.c,f(Fi,r,o.d),s)}return vt}return l($t,e,t,a,f(Fi,r,u),i)}return l($t,e,t,a,f(Fi,r,u),i)}return f(Ji,r,h(Pi,r,n,e,t,a,u,i))}),Ji=e(function(r,n){if(-1===n.$){var e=n.a,t=n.b,a=n.c,u=n.d,i=n.e;if(k(r,t)){var c=function(r){for(;;){if(-1!==r.$||-1!==r.d.$)return r;r=r.d}}(i);return-1===c.$?l(wt,e,c.b,c.c,u,Oi(i)):vt}return l(wt,e,t,a,u,f(Fi,r,i))}return vt}),Ii=e(function(r,n){var e=f(Fi,r,n);return-1!==e.$||e.a?e:l($t,1,e.b,e.c,e.d,e.e)}),Ui=t(function(r,n,e){var t=n(f(Ri,r,e));return t.$?f(Ii,r,e):s(kt,r,t.a,e)}),Xi=function(r){return!r.$},Di=e(function(r,n){return{$:4,a:r,b:n}}),Gi=function(r){return{$:3,a:r}},Ki=function(r){return{$:0,a:r}},Hi={$:2},Wi={$:1},Yi=function(r){return 1===r.$},Qi={$:0,b:"text",a:function(r){return ie(r.cX)}},Vi=ht,Zi=t(function(r,n,e){return r(n(e))}),rc=pr,nc=lr,ec=nc(0),tc=e(function(r,n){return f(rc,function(n){return nc(r(n))},n)}),ac=t(function(r,n,e){return f(rc,function(n){return f(rc,function(e){return nc(f(r,n,e))},e)},n)}),uc=Lr,ic=e(function(r,n){var e=n;return function(r){return hr(function(n){n(lr(mr(r)))})}(f(rc,uc(r),e))});kr.Task={b:ec,c:t(function(r,n){return f(tc,function(){return 0},(e=f(tt,ic(r),n),s(et,ac(Rn),nc(v),e)));var e}),d:t(function(){return nc(0)}),e:e(function(r,n){return f(tc,r,n)}),f:void 0};var cc,oc,fc,sc,bc,lc,dc=Ar("Task"),hc=vr,pc=e(function(r,n){return dc(f(hc,f(Zi,f(Zi,nc,r),ue),f(rc,f(Zi,f(Zi,nc,r),ie),n)))}),vc=e(function(r,n){return f(pc,r,f(Fr,n,Mn))}),gc=e(function(r,n){return f(vc,zi,Vi({cX:Bi,a2:Qi,aJ:v,a8:"GET",bB:Mn,eE:s(qu,"mapbox://styles/","https://api.mapbox.com/styles/v1/",r)+"?access_token="+n,bE:!1}))}),mc=sr,$c=function(r,n){return Mr(r),kr[r]={e:Sr,r:n,a:Tr},Ar(r)}("requestStyleUpgrade",mc),yc=e(function(r,n){return n.$?r:n.a}),wc=e(function(r,n){return s(et,pi,n,r)}),xc=e(function(r,n){switch(r.$){case 0:return r.a.$?E(T(n,{a1:ae(Ci(r.a.a))}),Te):E(T(n,{bz:ae(e=r.a.a)}),$c(e));case 1:return E(n,f(gc,n.aQ,n.aS));case 2:return E(T(n,{aQ:r.a}),Te);case 3:return E(T(n,{aS:r.a}),Te);default:var e=r.a;return E(T(n,{M:function(){var r=f(It,f(pi,"type",ti),e);r:for(;!r.$;)switch(r.a){case"Ok":return ae(f(lu,Me,f(It,f(pi,"result",Ti),e)));case"Err":return ae(ue(f(yc,"Something went wrong",f(It,f(wc,$(["error","message"]),ti),e))));default:break r}return ae(ue("Something went wrong"))}()}),Te)}}),kc={$:1},jc=function(r){return{$:2,a:r}},Lc=function(r){return{$:3,a:r}},Ac=function(r){switch(r.$){case 0:return 0;case 1:return 1;case 2:return 2;default:return 3}},qc=function(r){return Gr(Vr(r))},Ec=qc,Mc=e(function(r,n){return f(Yr,function(r){return"innerHTML"==r||"formAction"==r?"data-"+r:r}(r),Zr(n))}),Sc=Mc,Tc=Wr,Cc=Tc,zc=Hr,Bc=e(function(r,n){return f(zc,r,{$:0,a:n})}),Rc=sr,Nc=function(r){return{$:0,a:r}},_c=f(Zi,Nc,ca),Pc=_c,Oc=function(r){var n,e=(n=r.ap).$?f(Sc,"readonly",Rc(!0)):f(Bc,"editorChanged",f(Ut,n.a,f(wc,$(["detail"]),ti)));return Pc(s(Ec,"code-editor",$([f(Sc,"editorValue",mc(r.M)),e,f(Sc,"mode",mc("elm")),f(Cc,"width","50vw"),f(Cc,"height","100%")]),v))},Fc=e(function(r,n){return n.$?r:n.a}),Jc=(1,{$:5,a:1}),Ic=function(r){return{$:8,a:r}},Uc={$:1},Xc=function(r){return{$:7,a:r}},Dc=function(r){return{$:0,a:r}},Gc={$:0},Kc=e(function(r,n){return{$:0,a:r,b:n}}),Hc=f(Kc,0,0),Wc={$:0},Yc=function(r){return!r.b},Qc=function(r){return{$:1,a:r}},Vc={$:0},Zc=function(r){return{$:1,a:r}},ro=e(function(r,n){switch(n.$){case 0:return r;case 1:return C(n.a,r);case 2:return C(r,n.a);default:return C(n.a,C(r,n.b))}}),no=t(function(r,n,e){switch(e.$){case 0:return n;case 1:return C(f(tt,function(n){return E(r,n)},e.a),n);case 2:return C(n,f(tt,function(n){return E(r,n)},t=e.a));default:var t=e.b;return C(f(tt,function(n){return E(r,n)},e.a),C(n,f(tt,function(n){return E(r,n)},t)))}}),eo=Gr("div"),to=Gr("p"),ao=Gr("s"),uo=Gr("u"),io=e(function(r,n){return f(Yr,r,mc(n))}),co=io("className"),oo=function(r){return Kr(Vr(r))},fo=function(r){return r>31?{$:1,a:1<<r-32}:{$:0,a:1<<r}},so=fo(41),bo=fo(40),lo=fo(42),ho=fo(43),po=fo(45),vo=fo(37),go=e(function(r,n){var e=n.a;if(r.$){var t=r.a;return k(t&n.b,t)}var a=r.a;return k(a&e,a)}),mo=fo(44),$o=fo(39),yo=e(function(r,n){return!f(Ri,r,n).$}),wo=e(function(r,n){return f(yo,r,n)}),xo=function(r){switch(r.$){case 0:return ke(r.a)+"px";case 1:return"auto";case 2:return ke(r.a)+"fr";case 3:var n=r.b;return"min"+(ke(r.a)+xo(n));default:return n=r.b,"max"+(ke(r.a)+xo(n))}},ko=function(r){return ke(Ea(255*r))},jo=function(r){switch(r.$){case 0:return Mn;case 1:var n=r.a,e=n.b,t=n.c;return ae("mv-"+ko(n.a)+"-"+ko(e)+"-"+ko(t));default:var a=r.a,u=a.b,i=a.c,c=r.b,o=c.a,f=c.b,s=c.c,b=r.c,l=b.a,d=b.b,h=b.c,p=r.d;return ae("tfrm-"+ko(a.a)+"-"+ko(u)+"-"+ko(i)+"-"+ko(o)+"-"+ko(f)+"-"+ko(s)+"-"+ko(l)+"-"+ko(d)+"-"+ko(h)+"-"+ko(p))}},Lo=function(r){switch(r.$){case 13:case 12:return u=r.a;case 0:return r.a;case 1:return u=r.a;case 2:return"font-size-"+ke(r.a);case 3:case 4:case 5:return r.a;case 7:case 6:return r.a;case 8:var n=r.a;return"grid-rows-"+f(je,"-",f(tt,xo,n.d3))+"-cols-"+f(je,"-",f(tt,xo,n.y))+"-space-x-"+xo(n.ed.a)+"-space-y-"+xo(n.ed.b);case 9:var e=r.a;return"gp grid-pos-"+ke(e.cl)+"-"+ke(e.bM)+"-"+ke(e.cA)+"-"+ke(e.bU);case 11:var t=r.a,a=r.b,u=function(){switch(t){case 0:return"fs";case 1:return"hv";default:return"act"}}();return f(je," ",f(tt,function(r){var n=Lo(r);return""===n?"":n+"-"+u},a));default:return f(Fc,"",jo(r.a))}},Ao=e(function(r,n){var e=n.a,t=n.b,a=Lo(r);return f(wo,a,e)?n:E(f(jt,a,e),f(Rn,r,t))}),qo=e(function(r,n){return n.$?Mn:ae(r(n.a))}),Eo=e(function(r,n){var e=n.b;return E(r(n.a),e)}),Mo=e(function(r,n){return E(n.a,r(n.b))}),So=e(function(r,n){return{$:0,a:r,b:n}}),To=e(function(r,n){return{$:0,a:r,b:n}}),Co=function(r){var n=r.b,e=r.c,t=r.d;return"rgba("+ke(Ea(255*r.a))+","+ke(Ea(255*n))+","+ke(Ea(255*e))+","+ju(t)+")"},zo=function(r){return"."+r},Bo=function(r){return f(To,zo("s")+":focus .focusable, "+zo("s")+".focusable:focus",f(hi,ht,$([f(qo,function(r){return f(So,"border-color",Co(r))},r.cZ),f(qo,function(r){return f(So,"background-color",Co(r))},r.cS),f(qo,function(r){return f(So,"box-shadow",function(r){return f(je," ",f(hi,ht,$([r.b_?ae("inset"):Mn,ae(ju(r.b.a)+"px"),ae(ju(r.b.b)+"px"),ae(ju(r.Y)+"px"),ae(ju(r.ag)+"px"),ae(Co(r.Z))])))}({Y:r.Y,Z:r.Z,b_:!1,b:f(Mo,Fn,f(Eo,Fn,r.b)),ag:r.ag}))},r.d8),ae(f(So,"outline","none"))])))},Ro=Xr,No=function(r){return{$:5,a:r}},_o=e(function(r,n){return{$:1,a:r,b:n}}),Po=e(function(r,n){return{$:0,a:r,b:n}}),Oo=e(function(r,n){return{$:3,a:r,b:n}}),Fo=e(function(r,n){return{$:0,a:r,b:n}}),Jo=e(function(r,n){return{$:2,a:r,b:n}}),Io=$([0,1,2,3,4,5]),Uo=function(r){switch(r){case 0:return zo("ct");case 1:return zo("cb");case 2:return zo("cr");case 3:return zo("cl");case 4:return zo("ccx");default:return zo("ccy")}},Xo=function(r){switch(r){case 0:return zo("at");case 1:return zo("ab");case 2:return zo("ar");case 3:return zo("al");case 4:return zo("cx");default:return zo("cy")}},Do=function(r){return No(f(Mt,function(n){var e=r(n),t=e.a,a=e.b;return $([f(Oo,Uo(n),t),f(_o,zo("s"),$([f(Oo,Xo(n),a)]))])},Io))},Go=$([f(Fo,"display","flex"),f(Fo,"flex-direction","column"),f(Fo,"white-space","pre"),f(Oo,zo("hbh"),$([f(Fo,"z-index","0"),f(_o,zo("bh"),$([f(Fo,"z-index","-1")]))])),f(Oo,zo("sbt"),$([f(_o,zo("t"),$([f(Oo,zo("hf"),$([f(Fo,"flex-grow","0")])),f(Oo,zo("wf"),$([f(Fo,"align-self","auto !important")]))]))])),f(_o,zo("hc"),$([f(Fo,"height","auto")])),f(_o,zo("hf"),$([f(Fo,"flex-grow","100000")])),f(_o,zo("wf"),$([f(Fo,"width","100%")])),f(_o,zo("wc"),$([f(Fo,"align-self","flex-start")])),Do(function(r){switch(r){case 0:return E($([f(Fo,"justify-content","flex-start")]),$([f(Fo,"margin-bottom","auto !important"),f(Fo,"margin-top","0 !important")]));case 1:return E($([f(Fo,"justify-content","flex-end")]),$([f(Fo,"margin-top","auto !important"),f(Fo,"margin-bottom","0 !important")]));case 2:return E($([f(Fo,"align-items","flex-end")]),$([f(Fo,"align-self","flex-end")]));case 3:return E($([f(Fo,"align-items","flex-start")]),$([f(Fo,"align-self","flex-start")]));case 4:return E($([f(Fo,"align-items","center")]),$([f(Fo,"align-self","center")]));default:return E($([f(_o,zo("s"),$([f(Fo,"margin-top","auto"),f(Fo,"margin-bottom","auto")]))]),$([f(Fo,"margin-top","auto !important"),f(Fo,"margin-bottom","auto !important")]))}})]),Ko=$([0,1,2,3,4,5]),Ho=$([f(Po,"html,body",$([f(Fo,"height","100%"),f(Fo,"padding","0"),f(Fo,"margin","0")])),f(Po,C(zo("s"),C(zo("e"),zo("ic"))),$([f(Fo,"display","block")])),f(Po,zo("s")+":focus",$([f(Fo,"outline","none")])),f(Po,zo("ui"),$([f(Fo,"width","100%"),f(Fo,"height","auto"),f(Fo,"min-height","100%"),f(Fo,"z-index","0"),f(Oo,C(zo("s"),zo("hf")),$([f(Fo,"height","100%"),f(_o,zo("hf"),$([f(Fo,"height","100%")]))])),f(_o,zo("fr"),$([f(Oo,zo("nb"),$([f(Fo,"position","fixed")]))]))])),f(Po,zo("nb"),$([f(Fo,"position","relative"),f(Fo,"border","none"),f(Fo,"display","flex"),f(Fo,"flex-direction","row"),f(Fo,"flex-basis","auto"),f(Oo,zo("e"),Go),No(f(tt,function(r){switch(r){case 0:return f(Oo,zo("a"),$([f(Fo,"position","absolute"),f(Fo,"bottom","100%"),f(Fo,"left","0"),f(Fo,"width","100%"),f(Fo,"z-index","20"),f(Fo,"margin","0 !important"),f(_o,zo("hf"),$([f(Fo,"height","auto")])),f(_o,zo("wf"),$([f(Fo,"width","100%")])),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")]))]));case 1:return f(Oo,zo("b"),$([f(Fo,"position","absolute"),f(Fo,"bottom","0"),f(Fo,"left","0"),f(Fo,"height","0"),f(Fo,"width","100%"),f(Fo,"z-index","20"),f(Fo,"margin","0 !important"),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")])),f(_o,zo("hf"),$([f(Fo,"height","auto")]))]));case 2:return f(Oo,zo("or"),$([f(Fo,"position","absolute"),f(Fo,"left","100%"),f(Fo,"top","0"),f(Fo,"height","100%"),f(Fo,"margin","0 !important"),f(Fo,"z-index","20"),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")]))]));case 3:return f(Oo,zo("ol"),$([f(Fo,"position","absolute"),f(Fo,"right","100%"),f(Fo,"top","0"),f(Fo,"height","100%"),f(Fo,"margin","0 !important"),f(Fo,"z-index","20"),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")]))]));case 4:return f(Oo,zo("fr"),$([f(Fo,"position","absolute"),f(Fo,"width","100%"),f(Fo,"height","100%"),f(Fo,"left","0"),f(Fo,"top","0"),f(Fo,"margin","0 !important"),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")]))]));default:return f(Oo,zo("bh"),$([f(Fo,"position","absolute"),f(Fo,"width","100%"),f(Fo,"height","100%"),f(Fo,"left","0"),f(Fo,"top","0"),f(Fo,"margin","0 !important"),f(Fo,"z-index","0"),f(Fo,"pointer-events","none"),f(_o,"*",$([f(Fo,"pointer-events","auto")]))]))}},Ko))])),f(Po,zo("s"),$([f(Fo,"position","relative"),f(Fo,"border","none"),f(Fo,"flex-shrink","0"),f(Fo,"display","flex"),f(Fo,"flex-direction","row"),f(Fo,"flex-basis","auto"),f(Fo,"resize","none"),f(Fo,"font-feature-settings","inherit"),f(Fo,"box-sizing","border-box"),f(Fo,"margin","0"),f(Fo,"padding","0"),f(Fo,"border-width","0"),f(Fo,"border-style","solid"),f(Fo,"font-size","inherit"),f(Fo,"color","inherit"),f(Fo,"font-family","inherit"),f(Fo,"line-height","1"),f(Fo,"font-weight","inherit"),f(Fo,"text-decoration","none"),f(Fo,"font-style","inherit"),f(Oo,zo("wrp"),$([f(Fo,"flex-wrap","wrap")])),f(Oo,zo("notxt"),$([f(Fo,"-moz-user-select","none"),f(Fo,"-webkit-user-select","none"),f(Fo,"-ms-user-select","none"),f(Fo,"user-select","none")])),f(Oo,zo("cptr"),$([f(Fo,"cursor","pointer")])),f(Oo,zo("ctxt"),$([f(Fo,"cursor","text")])),f(Oo,zo("ppe"),$([f(Fo,"pointer-events","none !important")])),f(Oo,zo("cpe"),$([f(Fo,"pointer-events","auto !important")])),f(Oo,zo("clr"),$([f(Fo,"opacity","0")])),f(Oo,zo("oq"),$([f(Fo,"opacity","1")])),f(Oo,zo(C("hv","clr"))+":hover",$([f(Fo,"opacity","0")])),f(Oo,zo(C("hv","oq"))+":hover",$([f(Fo,"opacity","1")])),f(Oo,zo(C("fcs","clr"))+":focus",$([f(Fo,"opacity","0")])),f(Oo,zo(C("fcs","oq"))+":focus",$([f(Fo,"opacity","1")])),f(Oo,zo(C("atv","clr"))+":active",$([f(Fo,"opacity","0")])),f(Oo,zo(C("atv","oq"))+":active",$([f(Fo,"opacity","1")])),f(Oo,zo("ts"),$([f(Fo,"transition",f(je,", ",f(tt,function(r){return r+" 160ms"},$(["transform","opacity","filter","background-color","color","font-size"]))))])),f(Oo,zo("sb"),$([f(Fo,"overflow","auto"),f(Fo,"flex-shrink","1")])),f(Oo,zo("sbx"),$([f(Fo,"overflow-x","auto"),f(Oo,zo("r"),$([f(Fo,"flex-shrink","1")]))])),f(Oo,zo("sby"),$([f(Fo,"overflow-y","auto"),f(Oo,zo("c"),$([f(Fo,"flex-shrink","1")])),f(Oo,zo("e"),$([f(Fo,"flex-shrink","1")]))])),f(Oo,zo("cp"),$([f(Fo,"overflow","hidden")])),f(Oo,zo("cpx"),$([f(Fo,"overflow-x","hidden")])),f(Oo,zo("cpy"),$([f(Fo,"overflow-y","hidden")])),f(Oo,zo("wc"),$([f(Fo,"width","auto")])),f(Oo,zo("bn"),$([f(Fo,"border-width","0")])),f(Oo,zo("bd"),$([f(Fo,"border-style","dashed")])),f(Oo,zo("bdt"),$([f(Fo,"border-style","dotted")])),f(Oo,zo("bs"),$([f(Fo,"border-style","solid")])),f(Oo,zo("t"),$([f(Fo,"white-space","pre"),f(Fo,"display","inline-block")])),f(Oo,zo("it"),$([f(Fo,"line-height","1.05")])),f(Oo,zo("e"),Go),f(Oo,zo("r"),$([f(Fo,"display","flex"),f(Fo,"flex-direction","row"),f(_o,zo("s"),$([f(Fo,"flex-basis","0%"),f(Oo,zo("we"),$([f(Fo,"flex-basis","auto")]))])),f(_o,zo("hf"),$([f(Fo,"align-self","stretch !important")])),f(_o,zo("hfp"),$([f(Fo,"align-self","stretch !important")])),f(_o,zo("wf"),$([f(Fo,"flex-grow","100000")])),f(_o,zo("ctr"),$([f(Fo,"flex-grow","0"),f(Fo,"flex-basis","auto"),f(Fo,"align-self","stretch")])),f(_o,"u:first-of-type.acr",$([f(Fo,"flex-grow","1")])),f(_o,"s:first-of-type.accx",$([f(Fo,"flex-grow","1"),f(_o,zo("cx"),$([f(Fo,"margin-left","auto !important")]))])),f(_o,"s:last-of-type.accx",$([f(Fo,"flex-grow","1"),f(_o,zo("cx"),$([f(Fo,"margin-right","auto !important")]))])),f(_o,"s:only-of-type.accx",$([f(Fo,"flex-grow","1"),f(_o,zo("cy"),$([f(Fo,"margin-top","auto !important"),f(Fo,"margin-bottom","auto !important")]))])),f(_o,"s:last-of-type.accx ~ u",$([f(Fo,"flex-grow","0")])),f(_o,"u:first-of-type.acr ~ s.accx",$([f(Fo,"flex-grow","0")])),Do(function(r){switch(r){case 0:return E($([f(Fo,"align-items","flex-start")]),$([f(Fo,"align-self","flex-start")]));case 1:return E($([f(Fo,"align-items","flex-end")]),$([f(Fo,"align-self","flex-end")]));case 2:return E($([f(Fo,"justify-content","flex-end")]),v);case 3:return E($([f(Fo,"justify-content","flex-start")]),v);case 4:return E($([f(Fo,"justify-content","center")]),v);default:return E($([f(Fo,"align-items","center")]),$([f(Fo,"align-self","center")]))}}),f(Oo,zo("sev"),$([f(Fo,"justify-content","space-between")]))])),f(Oo,zo("c"),$([f(Fo,"display","flex"),f(Fo,"flex-direction","column"),f(_o,zo("hf"),$([f(Fo,"flex-grow","100000")])),f(_o,zo("wf"),$([f(Fo,"width","100%")])),f(_o,zo("wfp"),$([f(Fo,"width","100%")])),f(_o,zo("wc"),$([f(Fo,"align-self","flex-start")])),f(_o,"u:first-of-type.acb",$([f(Fo,"flex-grow","1")])),f(_o,"s:first-of-type.accy",$([f(Fo,"flex-grow","1"),f(_o,zo("cy"),$([f(Fo,"margin-top","auto !important"),f(Fo,"margin-bottom","0 !important")]))])),f(_o,"s:last-of-type.accy",$([f(Fo,"flex-grow","1"),f(_o,zo("cy"),$([f(Fo,"margin-bottom","auto !important"),f(Fo,"margin-top","0 !important")]))])),f(_o,"s:only-of-type.accy",$([f(Fo,"flex-grow","1"),f(_o,zo("cy"),$([f(Fo,"margin-top","auto !important"),f(Fo,"margin-bottom","auto !important")]))])),f(_o,"s:last-of-type.accy ~ u",$([f(Fo,"flex-grow","0")])),f(_o,"u:first-of-type.acb ~ s.accy",$([f(Fo,"flex-grow","0")])),Do(function(r){switch(r){case 0:return E($([f(Fo,"justify-content","flex-start")]),$([f(Fo,"margin-bottom","auto")]));case 1:return E($([f(Fo,"justify-content","flex-end")]),$([f(Fo,"margin-top","auto")]));case 2:return E($([f(Fo,"align-items","flex-end")]),$([f(Fo,"align-self","flex-end")]));case 3:return E($([f(Fo,"align-items","flex-start")]),$([f(Fo,"align-self","flex-start")]));case 4:return E($([f(Fo,"align-items","center")]),$([f(Fo,"align-self","center")]));default:return E($([f(Fo,"justify-content","center")]),v)}}),f(_o,zo("ctr"),$([f(Fo,"flex-grow","0"),f(Fo,"flex-basis","auto"),f(Fo,"width","100%"),f(Fo,"align-self","stretch !important")])),f(Oo,zo("sev"),$([f(Fo,"justify-content","space-between")]))])),f(Oo,zo("g"),$([f(Fo,"display","-ms-grid"),f(_o,".gp",$([f(_o,zo("s"),$([f(Fo,"width","100%")]))])),f(Jo,E("display","grid"),$([E("display","grid")])),(cc=function(r){switch(r){case 0:return $([f(Fo,"justify-content","flex-start")]);case 1:return $([f(Fo,"justify-content","flex-end")]);case 2:return $([f(Fo,"align-items","flex-end")]);case 3:return $([f(Fo,"align-items","flex-start")]);case 4:return $([f(Fo,"align-items","center")]);default:return $([f(Fo,"justify-content","center")])}},No(f(Mt,function(r){return $([f(_o,zo("s"),$([f(Oo,Xo(r),cc(r))]))])},Io)))])),f(Oo,zo("pg"),$([f(Fo,"display","block"),f(_o,zo("s:first-child"),$([f(Fo,"margin","0 !important")])),f(_o,zo("s"+Xo(3)+":first-child + .s"),$([f(Fo,"margin","0 !important")])),f(_o,zo("s"+Xo(2)+":first-child + .s"),$([f(Fo,"margin","0 !important")])),Do(function(r){switch(r){case 0:case 1:return E(v,v);case 2:return E(v,$([f(Fo,"float","right"),f(Oo,"::after",$([f(Fo,"content",'""'),f(Fo,"display","table"),f(Fo,"clear","both")]))]));case 3:return E(v,$([f(Fo,"float","left"),f(Oo,"::after",$([f(Fo,"content",'""'),f(Fo,"display","table"),f(Fo,"clear","both")]))]));case 4:default:return E(v,v)}})])),f(Oo,zo("iml"),$([f(Fo,"white-space","pre-wrap")])),f(Oo,zo("p"),$([f(Fo,"display","block"),f(Fo,"white-space","normal"),f(Oo,zo("hbh"),$([f(Fo,"z-index","0"),f(_o,zo("bh"),$([f(Fo,"z-index","-1")]))])),f(_o,zo("t"),$([f(Fo,"display","inline"),f(Fo,"white-space","normal")])),f(_o,zo("e"),$([f(Fo,"display","inline"),f(Fo,"white-space","normal"),f(Oo,zo("fr"),$([f(Fo,"display","flex")])),f(Oo,zo("bh"),$([f(Fo,"display","flex")])),f(Oo,zo("a"),$([f(Fo,"display","flex")])),f(Oo,zo("b"),$([f(Fo,"display","flex")])),f(Oo,zo("or"),$([f(Fo,"display","flex")])),f(Oo,zo("ol"),$([f(Fo,"display","flex")])),f(_o,zo("t"),$([f(Fo,"display","inline"),f(Fo,"white-space","normal")]))])),f(_o,zo("r"),$([f(Fo,"display","inline-flex")])),f(_o,zo("c"),$([f(Fo,"display","inline-flex")])),f(_o,zo("g"),$([f(Fo,"display","inline-grid")])),Do(function(r){switch(r){case 0:case 1:return E(v,v);case 2:return E(v,$([f(Fo,"float","right")]));case 3:return E(v,$([f(Fo,"float","left")]));case 4:default:return E(v,v)}})])),f(Oo,".hidden",$([f(Fo,"display","none")])),f(Oo,zo("w1"),$([f(Fo,"font-weight","100")])),f(Oo,zo("w2"),$([f(Fo,"font-weight","200")])),f(Oo,zo("w3"),$([f(Fo,"font-weight","300")])),f(Oo,zo("w4"),$([f(Fo,"font-weight","400")])),f(Oo,zo("w5"),$([f(Fo,"font-weight","500")])),f(Oo,zo("w6"),$([f(Fo,"font-weight","600")])),f(Oo,zo("w7"),$([f(Fo,"font-weight","700")])),f(Oo,zo("w8"),$([f(Fo,"font-weight","800")])),f(Oo,zo("w9"),$([f(Fo,"font-weight","900")])),f(Oo,zo("i"),$([f(Fo,"font-style","italic")])),f(Oo,zo("sk"),$([f(Fo,"text-decoration","line-through")])),f(Oo,zo("u"),$([f(Fo,"text-decoration","underline"),f(Fo,"text-decoration-skip-ink","auto"),f(Fo,"text-decoration-skip","ink")])),f(Oo,C(zo("u"),zo("sk")),$([f(Fo,"text-decoration","line-through underline"),f(Fo,"text-decoration-skip-ink","auto"),f(Fo,"text-decoration-skip","ink")])),f(Oo,zo("tun"),$([f(Fo,"font-style","normal")])),f(Oo,zo("tj"),$([f(Fo,"text-align","justify")])),f(Oo,zo("tja"),$([f(Fo,"text-align","justify-all")])),f(Oo,zo("tc"),$([f(Fo,"text-align","center")])),f(Oo,zo("tr"),$([f(Fo,"text-align","right")])),f(Oo,zo("tl"),$([f(Fo,"text-align","left")])),f(Oo,".modal",$([f(Fo,"position","fixed"),f(Fo,"left","0"),f(Fo,"top","0"),f(Fo,"width","100%"),f(Fo,"height","100%"),f(Fo,"pointer-events","none")]))]))]),Wo=function(r){return $([f(Po,".v-"+r,$([f(Fo,"font-feature-settings",'"'+r+'"')])),f(Po,".v-"+r+"-off",$([f(Fo,"font-feature-settings",'"'+r+'" 0')]))])},Yo=Et($([f(tt,function(r){return f(Po,".border-"+ke(r),$([f(Fo,"border-width",ke(r)+"px")]))},f(ye,0,6)),f(tt,function(r){return f(Po,".font-size-"+ke(r),$([f(Fo,"font-size",ke(r)+"px")]))},f(ye,8,32)),f(tt,function(r){return f(Po,".p-"+ke(r),$([f(Fo,"padding",ke(r)+"px")]))},f(ye,0,24)),$([f(Po,".v-smcp",$([f(Fo,"font-variant","small-caps")])),f(Po,".v-smcp-off",$([f(Fo,"font-variant","normal")]))]),Wo("zero"),Wo("onum"),Wo("liga"),Wo("dlig"),Wo("ordn"),Wo("tnum"),Wo("afrc"),Wo("frac")])),Qo="@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {"+zo("s")+zo("r")+" > "+zo("s")+" { flex-basis: auto !important; } "+zo("s")+zo("r")+" > "+zo("s")+zo("ctr")+" { flex-basis: auto !important; }}\n\n/* General Input Reset */\ninput[type=range] {\n -webkit-appearance: none; /* Hides the slider so that custom slider can be made */\n /* width: 100%; Specific width is required for Firefox. */\n background: transparent; /* Otherwise white in Chrome */\n position:absolute;\n left:0;\n top:0;\n z-index:10;\n width: 100%;\n outline: dashed 1px;\n height: 100%;\n opacity: 0;\n}\n\n/* Hide all syling for track */\ninput[type=range]::-moz-range-track {\n background: transparent;\n cursor: pointer;\n}\ninput[type=range]::-ms-track {\n background: transparent;\n cursor: pointer;\n}\ninput[type=range]::-webkit-slider-runnable-track {\n background: transparent;\n cursor: pointer;\n}\n\n/* Thumbs */\ninput[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n opacity: 0.5;\n width: 80px;\n height: 80px;\n background-color: black;\n border:none;\n border-radius: 5px;\n}\ninput[type=range]::-moz-range-thumb {\n opacity: 0.5;\n width: 80px;\n height: 80px;\n background-color: black;\n border:none;\n border-radius: 5px;\n}\ninput[type=range]::-ms-thumb {\n opacity: 0.5;\n width: 80px;\n height: 80px;\n background-color: black;\n border:none;\n border-radius: 5px;\n}\ninput[type=range][orient=vertical]{\n writing-mode: bt-lr; /* IE */\n -webkit-appearance: slider-vertical; /* WebKit */\n}\n\n.explain {\n border: 6px solid rgb(174, 121, 15) !important;\n}\n.explain > .s {\n border: 4px dashed rgb(0, 151, 167) !important;\n}\n\n.ctr {\n border: none !important;\n}\n.explain > .ctr > .s {\n border: 4px dashed rgb(0, 151, 167) !important;\n}\n\n",Vo=e(function(r,n){return{aB:n,j:v,I:v,B:r}}),Zo=e(function(r,n){var t=r;return s(et,e(function(r,n){switch(r.$){case 0:return T(n,{I:f(Rn,E(r.a,r.b),n.I)});case 2:var e=r.a;return T(n,{j:f(Rn,{aB:"\n}",j:v,I:r.b,B:"@supports ("+e.a+":"+e.b+") {"+t.B},n.j)});case 4:var a=r.b;return T(n,{j:f(Rn,f(Zo,f(Vo,t.B+" + "+r.a,""),a),n.j)});case 1:var u=r.b;return T(n,{j:f(Rn,f(Zo,f(Vo,t.B+" > "+r.a,""),u),n.j)});case 3:var i=r.b;return T(n,{j:f(Rn,f(Zo,f(Vo,C(t.B,r.a),""),i),n.j)});default:var c=r.a;return T(n,{j:f(Rn,f(Zo,f(Vo,t.B,""),c),n.j)})}}),t,n)}),rf=C(Qo,(oc=C(Ho,Yo),fc=function(r){return r.I.b?r.B+"{"+Dt(f(tt,function(r){return r.a+":"+r.b+";"},r.I))+r.aB+"}":""},sc=function(r){var n=r;return C(fc(n),Dt(f(tt,sc,n.j)))},Dt(f(tt,sc,s(et,e(function(r,n){var e=r.b;return f(Rn,f(Zo,f(Vo,r.a,""),e),n)}),v,oc))))),nf=s(qc,"style",v,$([Ro(rf)])),ef=e(function(r,n){return 0>L(r,n)?r:n}),tf=function(r){switch(r.$){case 0:return"serif";case 1:return"sans-serif";case 2:return"monospace";case 3:case 4:return'"'+r.a+'"';default:return'"'+r.a.ac+'"'}},af=function(r){switch(r.$){case 0:return"smcp"===r.a;case 1:return!1;default:return"smcp"===r.a&&1===r.b}},uf=function(r){return 5===r.$&&f(Ye,af,r.a.cx)},cf=t(function(r,n,e){var t=n.a,a=n.b;return r?e+"\n "+t+": "+a+" !important;":e+"\n "+t+": "+a+";"}),of=e(function(r,n){return r+" {"+f(je,"",f(tt,function(r){return r.a+": "+r.b+";"},n))+"}"}),ff=t(function(r,n,e){var t=e.b;return $([f(of,"."+r+"."+n+", ."+r+" ."+n,e.a),f(of,"."+r+"."+n+"> .t, ."+r+" ."+n+" > .t",t)])}),sf=t(function(r,n,e){var t=n.a,a=n.b,u=k(r,e)?r:e+" ."+r;return f(je," ",C(s(ff,u,"cap",a),s(ff,u,"fs",t)))}),bf=e(function(r,n){var e=k(r,n)?r:n+" ."+r;return f(je," ",$([f(of,"."+e+".cap, ."+e+" .cap",$([E("line-height","1")])),f(of,"."+e+".cap> .t, ."+e+" .cap > .t",$([E("vertical-align","0"),E("line-height","1")]))]))}),lf=function(r){return r.b?ae(s(Dn,ef,r.a,r.b)):Mn},df=t(function(r,n,e){return{bU:n/r,ag:r,cy:e}}),hf=function(r){var n,e=$([r.c6,r.cT,r.dj,r.dO]),t=f(Fc,r.dj,lf(e)),a=f(Fc,r.cT,lf(f(dt,function(r){return!k(r,t)},e))),u=f(Fc,r.c6,(n=e).b?ae(s(Dn,Vn,n.a,n.b)):Mn),i=1/(u-t),c=1-u;return{c6:s(df,1/(u-a),u-a,1-u),bS:s(df,i,u-t,c)}},pf=function(r){return E($([E("display","block")]),$([E("display","inline-block"),E("line-height",ju(r.bU)),E("vertical-align",ju(r.cy)+"em"),E("font-size",ju(r.ag)+"em")]))},vf=function(r){switch(r.$){case 0:return'"'+r.a+'"';case 1:return'"'+r.a+'" 0';default:return'"'+r.a+'" '+ke(r.b)}},gf=function(r){return 5===r.$?ae(f(je,", ",f(tt,vf,r.a.cx))):Mn},mf=e(function(r,n){var a=t(function(n,e,t){if(1===n.$)return e+"{"+s(Dn,cf(!1),"",t)+"\n}";switch(n.a){case 1:switch(r.dA){case 0:return"";case 2:return e+"-hv {"+s(Dn,cf(!0),"",t)+"\n}";default:return e+"-hv:hover {"+s(Dn,cf(!1),"",t)+"\n}"}case 0:var a=s(Dn,cf(!1),"",t);return f(je,"\n",$([e+"-fs:focus {"+a+"\n}",".s:focus ~ "+e+"-fs:not(.focus) {"+a+"\n}",".s:focus "+e+"-fs {"+a+"\n}",".focusable-parent:focus ~ .s "+e+"-fs {"+a+"\n}"]));default:return e+"-act:active {"+s(Dn,cf(!1),"",t)+"\n}"}}),u=e(function(r,n){switch(r.$){case 0:return s(a,n,r.a,r.b);case 13:return s(a,n,"."+(i=r.a),$([f(So,"box-shadow",r.b)]));case 12:return s(a,n,"."+(i=r.a),$([f(So,"opacity",ju(f(Vn,0,f(ef,1,1-r.b))))]));case 2:var e=r.a;return s(a,n,".font-size-"+ke(e),$([f(So,"font-size",ke(e)+"px")]));case 1:var i=r.a,c=r.b,o=f(je,", ",f(hi,gf,c)),b=$([f(So,"font-family",f(je,", ",f(tt,tf,c))),f(So,"font-feature-settings",o),f(So,"font-variant",f(Ye,uf,c)?"small-caps":"normal")]);return f(je," ",$([s(a,n,"."+i,b)]));case 3:return s(a,n,"."+(P=r.a),$([f(So,r.b,F=r.c)]));case 4:return s(a,n,"."+(P=r.a),$([f(So,r.b,Co(r.c))]));case 5:var l=r.a,d=r.b,h=r.c,p=ke(h)+"px",v=ke(d)+"px",g=".ar",m=".al",y=ju(h/2)+"px",w=ju(d/2)+"px";return Dt($([s(a,n,(P="."+l)+".r > .s + .s",$([f(So,"margin-left",v)])),s(a,n,P+".wrp.r > .s",$([f(So,"margin",y+" "+w)])),s(a,n,P+".c > .s + .s",$([f(So,"margin-top",p)])),s(a,n,P+".pg > .s + .s",$([f(So,"margin-top",p)])),s(a,n,P+".pg > "+m,$([f(So,"margin-right",v)])),s(a,n,P+".pg > "+g,$([f(So,"margin-left",v)])),s(a,n,C(P,".p"),$([f(So,"line-height","calc(1em + "+ke(h)+"px)")])),s(a,n,"textarea"+P,$([f(So,"line-height","calc(1em + "+ke(h)+"px)")])),s(a,n,P+".p > "+m,$([f(So,"margin-right",v)])),s(a,n,P+".p > "+g,$([f(So,"margin-left",v)])),s(a,n,P+".p::after",$([f(So,"content","''"),f(So,"display","block"),f(So,"height","0"),f(So,"width","0"),f(So,"margin-top",ke(-1*(h/2|0))+"px")])),s(a,n,P+".p::before",$([f(So,"content","''"),f(So,"display","block"),f(So,"height","0"),f(So,"width","0"),f(So,"margin-bottom",ke(-1*(h/2|0))+"px")]))]));case 7:g=r.c;var x=r.d;return m=r.e,s(a,n,P="."+(l=r.a),$([f(So,"padding",ke(r.b)+"px "+ke(g)+"px "+ke(x)+"px "+ke(m)+"px")]));case 6:return g=r.c,x=r.d,m=r.e,s(a,n,P="."+(l=r.a),$([f(So,"border-width",ke(r.b)+"px "+ke(g)+"px "+ke(x)+"px "+ke(m)+"px")]));case 8:var k=r.a,j=t(function(r,n,e){r:for(;;)switch(e.$){case 0:return ke(e.a)+"px";case 1:var t=E(r,n);if(1===t.a.$)return 1===t.b.$?"max-content":"minmax(max-content, "+ke(a=t.b.a)+"px)";if(1===t.b.$)return"minmax("+ke(t.a.a)+"px, max-content)";var a=t.b.a;return"minmax("+ke(t.a.a)+"px, "+ke(a)+"px)";case 2:var u=e.a,i=E(r,n);return 1===i.a.$?1===i.b.$?ke(u)+"fr":"minmax(max-content, "+ke(a=i.b.a)+"px)":1===i.b.$?"minmax("+ke(i.a.a)+"px, "+ke(u)+"frfr)":(a=i.b.a,"minmax("+ke(i.a.a)+"px, "+ke(a)+"px)");case 3:var c=e.b;r=ae(e.a),n=n,e=c;continue r;default:c=e.b,r=r,n=ae(e.a),e=c;continue r}}),L=function(r){return s(j,Mn,Mn,r)},A=(L(k.ed.a),L(k.ed.b)),q="grid-template-rows: "+f(je," ",f(tt,L,k.d3))+";",M="-ms-grid-rows: "+f(je,A,f(tt,L,k.y))+";",S="-ms-grid-columns: "+f(je,A,f(tt,L,k.y))+";",T="grid-row-gap:"+L(k.ed.b)+";",z="grid-column-gap:"+L(k.ed.a)+";",B="grid-template-columns: "+f(je," ",f(tt,L,k.y))+";";return C((P=".grid-rows-"+f(je,"-",f(tt,xo,k.d3))+"-cols-"+f(je,"-",f(tt,xo,k.y))+"-space-x-"+xo(k.ed.a)+"-space-y-"+xo(k.ed.b))+"{"+S+M+"}","@supports (display:grid) {"+P+"{"+B+q+z+T+"}}");case 9:var R=r.a,N=f(je," ",$(["-ms-grid-row: "+ke(R.cl)+";","-ms-grid-row-span: "+ke(R.bU)+";","-ms-grid-column: "+ke(R.bM)+";","-ms-grid-column-span: "+ke(R.cA)+";"])),_=f(je," ",$(["grid-row: "+ke(R.cl)+" / "+ke(R.cl+R.bU)+";","grid-column: "+ke(R.bM)+" / "+ke(R.bM+R.cA)+";"]));return C((P=".grid-pos-"+ke(R.cl)+"-"+ke(R.bM)+"-"+ke(R.cA)+"-"+ke(R.bU))+"{"+N+"}","@supports (display:grid) {"+P+"{"+_+"}}");case 11:var P=r.a;return f(je," ",f(tt,function(r){return f(u,r,ae(P))},r.b));default:var O=r.a,F=function(r){switch(r.$){case 0:return Mn;case 1:var n=r.a,e=n.b,t=n.c;return ae("translate3d("+ju(n.a)+"px, "+ju(e)+"px, "+ju(t)+"px)");default:var a=r.a,u=a.b,i=a.c,c=r.b,o=c.a,f=c.b,s=c.c,b=r.c,l=b.a,d=b.b,h=b.c,p=r.d,v="translate3d("+ju(a.a)+"px, "+ju(u)+"px, "+ju(i)+"px)",g="scale3d("+ju(o)+", "+ju(f)+", "+ju(s)+")",m="rotate3d("+ju(l)+", "+ju(d)+", "+ju(h)+", "+ju(p)+"rad)";return ae(v+" "+g+" "+m)}}(O),J=E(P=jo(O),F);return J.a.$||J.b.$?"":s(a,n,"."+(l=J.a.a),$([f(So,"transform",J.b.a)]))}}),i=s(Dn,e(function(r,n){return{aP:C(n.aP,f(u,r,Mn)),av:(t=1===(e=r).$?ae(E(e.a,e.b)):Mn,1===t.$?n.av:f(Rn,t.a,n.av))};var e,t}),{aP:"",av:v},n),c=i.aP;return C(function(r){var n=function(r){return 4===r.$?ae("@import url('"+r.b+"');"):Mn},t=function(r){return f(je,"\n",f(hi,n,r.b))},a=f(tt,Hn,r),u=function(r){var n,t=r.a,u=(n=r.b,s(Dn,e(function(r,n){if(1===n.$){if(5===r.$){var e=r.a.cF;if(1===e.$)return n;var t=e.a;return ae(E(pf(hf(t).bS),pf(hf(t).c6)))}return n}return n}),Mn,n));return f(je,"",f(tt,1===u.$?bf(t):f(sf,t,u.a),a))};return C(f(je,"\n",f(tt,t,r)),f(je,"\n",f(tt,u,r)))}(i.av),c)}),$f=e(function(r,n){return s(qc,"style",v,$([Ro(f(mf,r,n))]))}),yf=a(function(r,n,e,t){return r?f(Rn,E("static-stylesheet",nf),f(Rn,E("dynamic-stylesheet",f($f,n,s(Dn,Ao,E(mt,$([Bo(n.du)])),e).b)),t)):f(Rn,E("dynamic-stylesheet",f($f,n,s(Dn,Ao,E(mt,$([Bo(n.du)])),e).b)),t)}),wf=a(function(r,n,e,t){return r?f(Rn,nf,f(Rn,f($f,n,s(Dn,Ao,E(mt,$([Bo(n.du)])),e).b),t)):f(Rn,f($f,n,s(Dn,Ao,E(mt,$([Bo(n.du)])),e).b),t)}),xf=i(function(r,n,t,a,u,i){var c=e(function(r,n){if(1===a.$){var e=a.a;return s(oo,r,n,function(){switch(u.$){case 0:return e;case 2:return b(yf,!1,u.a,u.b,e);default:return b(yf,!0,u.a,u.b,e)}}())}var t=a.a;return f(function(){switch(r){case"div":return eo;case"p":return to;default:return qc(r)}}(),n,function(){switch(u.$){case 0:return t;case 2:return b(wf,!1,u.a,u.b,t);default:return b(wf,!0,u.a,u.b,t)}}())}),o=function(){switch(n.$){case 0:return f(c,"div",t);case 1:return f(c,n.a,t);default:return s(qc,n.a,t,$([f(c,n.b,$([co("s e")]))]))}}();switch(i){case 0:return f(go,$o,r)&&!f(go,mo,r)?o:f(go,bo,r)?f(uo,$([co(f(je," ",$(["s","e","ctr","ccy","acr"])))]),$([o])):f(go,lo,r)?f(ao,$([co(f(je," ",$(["s","e","ctr","ccy","accx"])))]),$([o])):o;case 1:return f(go,vo,r)&&!f(go,po,r)?o:f(go,ho,r)?f(ao,$([co(f(je," ",$(["s","e","ctr","accy"])))]),$([o])):f(go,so,r)?f(uo,$([co(f(je," ",$(["s","e","ctr","acb"])))]),$([o])):o;default:return o}}),kf=Ro,jf=function(r){return f(eo,$([co(f(je," ",$(["s","t","wc","hc"])))]),$([kf(r)]))},Lf=function(r){return s(qc,"div",$([co(f(je," ",$(["s","t","wf","hf"])))]),$([Ro(r)]))},Af=t(function(r,n,t){var a=e(function(n,e){var t=n.a,a=n.b,u=e.a,i=e.b;switch(a.$){case 0:var c=a.a;return k(r,4),E(f(Rn,E(t,c(r)),u),i);case 1:var o=a.a;return k(r,4),E(f(Rn,E(t,f(o.dB,Vc,r)),u),Yc(i)?o.ei:C(o.ei,i));case 2:var s=a.a;return E(f(Rn,E(t,k(r,2)?Lf(s):jf(s)),u),i);default:return E(u,i)}}),u=e(function(n,e){var t=e.a,a=e.b;switch(n.$){case 0:var u=n.a;return k(r,4),E(f(Rn,u(r),t),a);case 1:var i=n.a;return k(r,4),E(f(Rn,f(i.dB,Vc,r),t),Yc(a)?i.ei:C(i.ei,a));case 2:var c=n.a;return E(f(Rn,k(r,2)?Lf(c):jf(c),t),a);default:return E(t,a)}});if(1===n.$){var i=n.a,c=s(et,a,E(v,v),i),o=c.a;if((p=Yc(h=c.b)?t.ei:C(t.ei,h)).b){var d=p;return Zc({dB:b(xf,t.P,t.S,t.K,Qc(s(no,"nearby-element-pls",o,t.L))),ei:d})}return Nc(l(xf,t.P,t.S,t.K,Qc(s(no,"nearby-element-pls",o,t.L)),Vc))}var h,p,g=n.a,m=s(et,u,E(v,v),g),$=m.a;return(p=Yc(h=m.b)?t.ei:C(t.ei,h)).b?(d=p,Zc({dB:b(xf,t.P,t.S,t.K,Dc(f(ro,$,t.L))),ei:d})):Nc(l(xf,t.P,t.S,t.K,Dc(f(ro,$,t.L)),Vc))}),qf=e(function(r,n){return f(Qr,function(r){return/^(on|formAction$)/i.test(r)?"data-"+r:r}(r),Zr(n))}),Ef=e(function(r,n){var e=n.a,t=n.b;return r.$?f(Kc,e,r.a|t):f(Kc,r.a|e,t)}),Mf=fo(7),Sf=fo(36),Tf=e(function(r,n){return f(Kc,r.a|n.a,r.b|n.b)}),Cf=fo(6),zf=fo(38),Bf=fo(30),Rf=fo(29),Nf=e(function(r,n){return{$:2,a:r,b:n}}),_f=function(r){return{$:1,a:r}},Pf=t(function(r,n,e){return{$:3,a:r,b:n,c:e}}),Of=function(r){return{$:1,a:r}},Ff=e(function(r,n){return{$:3,a:r,b:n}}),Jf=function(r){return{$:2,a:r}},If=e(function(r,n){return f(eo,$([co(function(){switch(r){case 0:return f(je," ",$(["nb","e","a"]));case 1:return f(je," ",$(["nb","e","b"]));case 2:return f(je," ",$(["nb","e","or"]));case 3:return f(je," ",$(["nb","e","ol"]));case 4:return f(je," ",$(["nb","e","fr"]));default:return f(je," ",$(["nb","e","bh"]))}}())]),$([function(){switch(n.$){case 3:return Ro("");case 2:return jf(n.a);case 0:return(0,n.a)(2);default:return f(n.a.dB,Vc,2)}}()]))}),Uf=t(function(r,n,e){var t=f(If,r,n);switch(e.$){case 0:return 5===r?Of($([t])):Jf($([t]));case 1:var a=e.a;return 5===r?Of(f(Rn,t,a)):f(Ff,a,$([t]));case 2:var u=e.a;return 5===r?f(Ff,$([t]),u):Jf(f(Rn,t,u));default:return a=e.a,u=e.b,5===r?f(Ff,f(Rn,t,a),u):f(Ff,a,f(Rn,t,u))}}),Xf=e(function(r,n){switch(n.$){case 0:return _f(r);case 1:return f(Nf,n.a,r);default:return f(Nf,n.a,n.b)}}),Df=function(r){switch(r){case 0:return"ah al";case 2:return"ah ar";default:return"ah cx"}},Gf=function(r){switch(r){case 0:return"av at";case 2:return"av ab";default:return"av cy"}},Kf=a(function(r,n,e,t){return{$:2,a:r,b:n,c:e,d:t}}),Hf=function(r){return{$:1,a:r}},Wf=e(function(r,n){switch(r.$){case 0:switch(n.$){case 0:return Hf(M(a=n.a,0,0));case 1:return Hf(M(0,u=n.a,0));case 2:return Hf(M(0,0,i=n.a));case 3:return Hf(e=n.a);case 4:var e=n.a,t=n.b;return b(Kf,M(0,0,0),M(1,1,1),e,t);default:return e=n.a,b(Kf,M(0,0,0),e,M(0,0,1),0)}case 1:var a=(c=r.a).a,u=c.b,i=c.c;switch(n.$){case 0:return Hf(M(n.a,u,i));case 1:return Hf(M(a,n.a,i));case 2:return Hf(M(a,u,n.a));case 3:return Hf(e=n.a);case 4:return e=n.a,t=n.b,b(Kf,c,M(1,1,1),e,t);default:return b(Kf,c,n.a,M(0,0,1),0)}default:a=(c=r.a).a,u=c.b,i=c.c;var c,o=r.b,f=r.c;switch(t=r.d,n.$){case 0:return b(Kf,M(n.a,u,i),o,f,t);case 1:return b(Kf,M(a,n.a,i),o,f,t);case 2:return b(Kf,M(a,u,n.a),o,f,t);case 3:return b(Kf,n.a,o,f,t);case 4:return b(Kf,c,o,n.a,n.b);default:return b(Kf,c,n.a,f,t)}}}),Yf=function(r){switch(r.$){case 0:var n=ke(r.a),e="height-px-"+n;return M(Hc,e,$([s(Pf,e,"height",n+"px")]));case 1:return M(f(Ef,Sf,Hc),"hc",v);case 2:var t=r.a;return 1===t?M(f(Ef,vo,Hc),"hf",v):M(f(Ef,vo,Hc),"hfp height-fill-"+ke(t),$([s(Pf,"s.r > "+zo("height-fill-"+ke(t)),"flex-grow",ke(1e5*t))]));case 3:var a=r.a,u=r.b,i="min-height-"+ke(a),c=s(Pf,i,"min-height",ke(a)+"px"),o=Yf(u),b=o.b,l=o.c;return M(f(Ef,po,o.a),i+" "+b,f(Rn,c,l));default:var d=r.a,h=(u=r.b,i="max-height-"+ke(d),c=s(Pf,i,"max-height",ke(d)+"px"),Yf(u));return b=h.b,l=h.c,M(f(Ef,po,h.a),i+" "+b,f(Rn,c,l))}},Qf=function(r){switch(r.$){case 0:var n=r.a;return M(Hc,"we width-px-"+ke(n),$([s(Pf,"width-px-"+ke(n),"width",ke(n)+"px")]));case 1:return M(f(Ef,zf,Hc),"wc",v);case 2:var e=r.a;return 1===e?M(f(Ef,$o,Hc),"wf",v):M(f(Ef,$o,Hc),"wfp width-fill-"+ke(e),$([s(Pf,"s.r > "+zo("width-fill-"+ke(e)),"flex-grow",ke(1e5*e))]));case 3:var t=r.a,a=r.b,u="min-width-"+ke(t),i=s(Pf,u,"min-width",ke(t)+"px"),c=Qf(a),o=c.b,b=c.c;return M(f(Ef,mo,c.a),u+" "+o,f(Rn,i,b));default:var l=r.a,d=(a=r.b,u="max-width-"+ke(l),i=s(Pf,u,"max-width",ke(l)+"px"),Qf(a));return o=d.b,b=d.c,M(f(Ef,mo,d.a),u+" "+o,f(Rn,i,b))}},Vf=fo(27),Zf=e(function(r,n){if(k(r,Vf)){if(3!==n.$)return!1;switch(n.c){case"0px":case"1px":case"2px":case"3px":case"4px":case"5px":case"6px":return!0;default:return!1}}else switch(n.$){case 2:var e=n.a;return e>=8&&32>=e;case 7:var t=n.b,a=n.c,u=n.e;return k(t,n.d)&&k(t,a)&&k(t,u)&&t>=0&&24>=t;default:return!1}}),rs=o(function(r,n,e,t,a,u,i,c){r:for(;;){if(!c.b){var o=jo(t);return 1===o.$?{K:f(Rn,co(r),u),L:i,P:e,S:n,ei:a}:{K:f(Rn,co(r+" "+o.a),u),L:i,P:e,S:n,ei:f(Rn,(O=t,{$:10,a:O}),a)}}var b=c.a,l=c.b;switch(b.$){case 0:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 3:var d=b.b;if(f(go,p=b.a,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}r=m=d+" "+r,n=$=n,e=y=f(Ef,p,e),t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 1:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=f(Rn,b.a,u),i=i,c=l;continue r;case 4:var h=b.b;if(f(go,p=b.a,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}if(f(Zf,p,h)){r=m=Lo(h)+" "+r,n=$=n,e=y=f(Ef,p,e),t=w=t,a=x=a,u=u,i=i,c=l;continue r}r=m=Lo(h)+" "+r,n=$=n,e=y=f(Ef,p,e),t=w=t,a=x=f(Rn,h,a),u=u,i=i,c=l;continue r;case 10:var p,v=b.b;r=m=r,n=$=n,e=y=f(Ef,p=b.a,e),t=w=f(Wf,t,v),a=x=a,u=u,i=i,c=l;continue r;case 7:var g=b.a;if(f(go,Cf,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}switch(g.$){case 0:var m="we width-px-"+ke(A=g.a)+" "+r,$=n,y=f(Ef,Cf,e),w=t,x=f(Rn,s(Pf,"width-px-"+ke(A),"width",ke(A)+"px"),a);r=m,n=$,e=y,t=w,a=x,u=u,i=i,c=l;continue r;case 1:r=m=r+" wc",n=$=n,e=y=f(Ef,zf,f(Ef,Cf,e)),t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 2:if(1===(M=g.a)){r=m=r+" wf",n=$=n,e=y=f(Ef,$o,f(Ef,Cf,e)),t=w=t,a=x=a,u=u,i=i,c=l;continue r}m=r+" wfp width-fill-"+ke(M),$=n,y=f(Ef,$o,f(Ef,Cf,e)),w=t,x=f(Rn,s(Pf,"s.r > "+zo("width-fill-"+ke(M)),"flex-grow",ke(1e5*M)),a),r=m,n=$,e=y,t=w,a=x,u=u,i=i,c=l;continue r;default:var k=Qf(g),j=k.c;m=r+" "+k.b,$=n,y=f(Tf,k.a,e),w=t,x=C(j,a),r=m,n=$,e=y,t=w,a=x,u=u,i=i,c=l;continue r}case 8:var L=b.a;if(f(go,Mf,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}switch(L.$){case 0:var A,q=ke(A=L.a)+"px",E="height-px-"+q;r=m=E+" "+r,n=$=n,e=y=f(Ef,Mf,e),t=w=t,a=x=f(Rn,s(Pf,E,"height ",q),a),u=u,i=i,c=l;continue r;case 1:r=m="hc "+r,n=$=n,e=y=f(Ef,Sf,f(Ef,Mf,e)),t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 2:var M;if(1===(M=L.a)){r=m="hf "+r,n=$=n,e=y=f(Ef,vo,f(Ef,Mf,e)),t=w=t,a=x=a,u=u,i=i,c=l;continue r}m=r+" hfp height-fill-"+ke(M),$=n,y=f(Ef,vo,f(Ef,Mf,e)),w=t,x=f(Rn,s(Pf,"s.c > "+zo("height-fill-"+ke(M)),"flex-grow",ke(1e5*M)),a),r=m,n=$,e=y,t=w,a=x,u=u,i=i,c=l;continue r;default:var S=Yf(L);j=S.c,m=r+" "+S.b,$=n,y=f(Tf,S.a,e),w=t,x=C(j,a),r=m,n=$,e=y,t=w,a=x,u=u,i=i,c=l;continue r}case 2:var T=b.a;switch(T.$){case 0:r=m=r,n=$=f(Xf,"main",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 1:r=m=r,n=$=f(Xf,"nav",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 2:r=m=r,n=$=f(Xf,"footer",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 3:r=m=r,n=$=f(Xf,"aside",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 4:var z=T.a;if(z>1){if(7>z){m=r,$=f(Xf,"h"+ke(z),n),r=m,n=$,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}r=m=r,n=$=f(Xf,"h6",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}r=m=r,n=$=f(Xf,"h1",n),e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 9:var B=function(){switch(n.$){case 0:return _f("p");case 1:return _f(n.a);default:return f(Nf,n.a,n.b)}}();r=m=r,n=$=B,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r;case 8:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=f(Rn,f(qf,"role","button"),u),i=i,c=l;continue r;case 5:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=f(Rn,f(qf,"aria-label",T.a),u),i=i,c=l;continue r;case 6:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=f(Rn,f(qf,"aria-live","polite"),u),i=i,c=l;continue r;default:r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=f(Rn,f(qf,"aria-live","assertive"),u),i=i,c=l;continue r}case 9:var R=b.a,N=b.b;j=function(){switch(N.$){case 3:case 2:case 0:return a;default:return C(a,N.a.ei)}}(),r=m=r,n=$=n,e=y=e,t=w=t,a=x=j,u=u,i=s(Uf,R,N,i),c=l;continue r;case 6:var _=b.a;if(f(go,Bf,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}m=Df(_)+" "+r,$=n,y=function(r){switch(_){case 1:return f(Ef,lo,r);case 2:return f(Ef,bo,r);default:return r}}(f(Ef,Bf,e)),r=m,n=$,e=y,t=w=t,a=x=a,u=u,i=i,c=l;continue r;default:var P=b.a;if(f(go,Rf,e)){r=m=r,n=$=n,e=y=e,t=w=t,a=x=a,u=u,i=i,c=l;continue r}m=Gf(P)+" "+r,$=n,y=function(r){switch(P){case 1:return f(Ef,ho,r);case 2:return f(Ef,so,r);default:return r}}(f(Ef,Rf,e)),r=m,n=$,e=y,t=w=t,a=x=a,u=u,i=i,c=l;continue r}}var O}),ns={$:0},es=a(function(r,n,e,t){return s(Af,r,t,p(rs,function(r){switch(r){case 0:return"s r";case 1:return"s c";case 2:return"s e";case 3:return"s g";case 4:return"s p";default:return"s pg"}}(r),n,Hc,ns,v,v,Wc,Gn(e)))}),ts=function(r){return{$:1,a:r}},as=function(r){return ts(co(r))},us=e(function(r,n){return b(es,1,Gc,f(Rn,as("ct cl"),f(Rn,Ic(Uc),f(Rn,Xc(Uc),r))),Dc(n))}),is=e(function(r,n){return b(es,2,Gc,f(Rn,Xc(Uc),f(Rn,Ic(Uc),r)),Dc($([n])))}),cs=fo(2),os=u(function(r,n,e,t,a){return{$:7,a:r,b:n,c:e,d:t,e:a}}),fs=e(function(r,n){return{$:4,a:r,b:n}}),ss=function(r){return f(fs,cs,l(os,"p-"+ke(r),r,r,r,r))},bs=function(r){return{$:0,a:r}},ls=a(function(r,n,e,t){return{$:0,a:r,b:n,c:e,d:t}}),ds=t(function(r,n,e){return b(ls,r/255,n/255,e/255,1)}),hs=function(r){return{$:2,a:r}},ps=fo(8),vs=t(function(r,n,e){return{$:4,a:r,b:n,c:e}}),gs=function(r){var n=r.b,e=r.c,t=r.d;return ko(r.a)+"-"+ko(n)+"-"+ko(e)+"-"+ko(t)},ms=function(r){return f(fs,ps,s(vs,"bg-"+gs(r),"background-color",r))},$s=e(function(r,n){return f(Yr,r,Rc(n))}),ys=$s("disabled"),ws=fo(21),xs=e(function(r,n){return{$:3,a:r,b:n}}),ks=f(xs,ws,"cptr"),js=f(Zi,ts,function(r){return f(Bc,"click",Ft(r))}),Ls=function(r){return 4===r.$&&11===r.b.$&&!r.b.a},As={$:0},qs=function(r){return f(Ye,Ls,r)?As:as("focusable")},Es=e(function(r,n){return f(zc,r,{$:2,a:n})}),Ms=e(function(r,n){return ts(f(Es,"keyup",f(Ut,function(r){return E(r,!0)},f(Ru,function(e){return k(e,r)?Ft(n):Ot("Not the enter key")},f(pi,"key",ti)))))}),Ss={$:8},Ts=function(r){return{$:2,a:r}},Cs=e(function(r,n){var e=n.dT,t=n.aL;return b(es,2,Gc,f(Rn,Xc(Uc),f(Rn,Ic(Uc),f(Rn,as("ccx ccy sbt notxt"),f(Rn,ks,f(Rn,qs(r),f(Rn,Ts(Ss),f(Rn,ts(f(Qr,"tabIndex",ke(0))),function(){if(1===e.$)return f(Rn,ts(ys(!0)),r);var n=e.a;return f(Rn,js(n),f(Rn,function(r){return f(Ms,"Enter",r)}(n),r))}()))))))),Dc($([t])))}),zs=t(function(r,n,e){return{$:0,a:r,b:n,c:e}})(1),Bs=io("type"),Rs=function(r){return E(r,!0)},Ns=e(function(r,n){return f(zc,r,{$:1,a:n})}),_s=f(wc,$(["target","value"]),ti),Ps=fo(0),Os=e(function(r,n){return{$:12,a:r,b:n}}),Fs={$:2,a:1},Js=e(function(r,n){return{$:9,a:r,b:n}}),Is=a(function(r,n,e,t){return"pad-"+ke(r)+"-"+ke(n)+"-"+ke(e)+"-"+ke(t)}),Us=ls,Xs=fo(3),Ds=t(function(r,n,e){return{$:5,a:r,b:n,c:e}}),Gs=e(function(r,n){return"spacing-"+ke(r)+"-"+ke(n)}),Ks=function(r){return f(fs,Xs,s(Ds,f(Gs,r,r),r,r))},Hs=fo(28),Ws=function(r){return f(fs,Hs,s(vs,"bc-"+gs(r),"border-color",r))},Ys=fo(14),Qs=function(r){return f(fs,Ys,s(vs,"fc-"+gs(r),"color",r))},Vs=a(function(r,n,e,t){return{$:0,a:r,b:n,c:e,d:t}}),Zs=t(function(r,n,e){if(1===n.$)return b(es,1,_f("label"),r,Dc($([e])));var t=n.a,a=b(es,2,Gc,n.b,Dc($([n.c])));switch(t){case 2:return b(es,1,_f("label"),r,Dc($([a,e])));case 3:return b(es,1,_f("label"),r,Dc($([e,a])));case 0:return b(es,0,_f("label"),r,Dc($([e,a])));default:return b(es,0,_f("label"),r,Dc($([a,e])))}}),rb=f(Zi,ts,qf("autocomplete")),nb=t(function(r,n,e){return b(ls,r,n,e,1)}),eb=s(nb,136/255,138/255,133/255),tb=fo(17),ab=u(function(r,n,e,t,a){return{$:6,a:r,b:n,c:e,d:t,e:a}}),ub=function(r){return f(fs,Vf,l(ab,"b-"+ke(r),r,r,r,r))},ib=s(nb,186/255,189/255,182/255),cb=f(e(function(r,n){return k(r,n)?f(fs,cs,l(os,"p-"+ke(r),r,r,r,r)):f(fs,cs,l(os,"p-"+ke(r)+"-"+ke(n),n,r,n,r))}),12,12),ob=s(nb,1,1,1),fb=$([cb,(3,f(fs,tb,s(Pf,"br-"+ke(3),"border-radius",ke(3)+"px"))),Ws(ib),ms(ob),ub(1),Ks(3),Xc(Fs)]),sb=function(r){r:for(;4===r.$;)switch(r.b.$){case 7:case 6:case 10:return!0;default:break r}return!1},bb=$s("spellcheck"),lb=f(Zi,ts,bb),db=fo(47),hb=a(function(r,n,e,t){var a,u=function(r){return r.a+r.c},i=1>(a=ge($(r.split(/\r\n|\r|\n/g))))?1:a,c=(i-1)*n+f(Fc,0,f(qo,u,e))+f(Fc,0,f(qo,u,t));return f(fs,db,s(Pf,"textarea-height-"+ke(i),"height","calc("+ke(i)+"em + "+ke(c)+"px) !important"))}),pb=io("value"),vb=f(Zi,ts,pb),gb=Ts({$:6}),mb=e(function(r,n){return s(et,e(function(r,e){return n(r)?f(Rn,r,e):e}),v,function(r){return s(et,e(function(r,n){var e=n.a,t=n.b;switch(r.$){case 0:return E(e,t);case 3:case 1:case 4:return E(f(Rn,r,e),t);case 7:return f(wo,"width",t)?E(e,t):E(f(Rn,r,e),f(jt,"width",t));case 8:return f(wo,"height",t)?E(e,t):E(f(Rn,r,e),f(jt,"height",t));case 2:return f(wo,"described",t)?E(e,t):E(f(Rn,r,e),f(jt,"described",t));case 9:return E(f(Rn,r,e),t);case 6:return f(wo,"align-x",t)?E(e,t):E(f(Rn,r,e),f(jt,"align-x",t));case 5:return f(wo,"align-y",t)?E(e,t):E(f(Rn,r,e),f(jt,"align-y",t));default:return f(wo,"transform",t)?E(e,t):E(f(Rn,r,e),f(jt,"transform",t))}}),E(v,mt),r).a}(r))}),$b=function(r){r:for(;;)switch(r.$){case 1:return!0;case 4:case 3:r=r.b;continue r;default:return!1}},yb=t(function(r,n,t){var a,u,i=function(r){return 9===r.$},c=$([ts((a=t.ap,f(Ns,"input",f(Ut,Rs,f(Ut,a,_s)))))]),o=C(fb,n),d=f(mb,o,function(r){r:for(;;)switch(r.$){case 7:case 8:if(2===r.a.$)return!0;break r;case 6:case 5:return!0;case 4:switch(r.b.$){case 5:case 2:case 1:return!0;default:break r}default:break r}return!1}),h=f(dt,sb,o),p=f(mb,o,function(r){return 8===r.$&&2===r.a.$}),g=f(mb,o,function(r){return 9===r.$}),m=f(dt,f(Zi,Gt,i),o),y=function(){var n=r.x;if(n.$){var a=s(et,e(function(r,n){r:for(;;)switch(r.$){case 2:return n;case 8:var e=r.a;return 1===n.aK.$?T(n,{m:f(Rn,r,n.m),aK:ae($b(e))}):n;case 4:switch(r.b.$){case 6:var t=r.b,a=t.b,u=t.c,i=t.d,c=t.e;return 1===n.aM.$?T(n,{m:f(Rn,r,n.m),aM:ae(b(Vs,a,u,i,c))}):n;case 7:var o=r.b;return a=o.b,u=o.c,i=o.d,c=o.e,1===n.aN.$?T(n,{m:n.m,aN:ae(b(Vs,a,u,i,c))}):n;case 5:var s=r.b.c;return 1===n.aO.$?T(n,{m:f(Rn,r,n.m),aO:ae(s)}):n;default:break r}default:break r}return T(n,{m:f(Rn,r,n.m)})}),{m:v,aK:Mn,aM:Mn,aN:Mn,aO:Mn},o),u=a.aN,i=a.aK,c=a.m,d=a.aM,h=f(Fc,5,a.aO);return M("textarea",C($([lb(r.r),as("iml"),f(Fc,As,f(qo,rb,r.p)),function(){if(1===u.$)return As;var r,n,e,t,a,i=u.a,c=i.a,o=i.b,s=i.d;return t=(r={c1:f(Vn,0,i.c-(h/2|0)),dN:s,d1:o,ez:f(Vn,0,c-(h/2|0))}).c1,a=r.dN,k(n=r.ez,e=r.d1)&&k(n,t)&&k(n,a)?f(fs,cs,l(os,"p-"+ke(n),n,n,n,n)):f(fs,cs,l(os,b(Is,n,e,t,a),n,e,t,a))}(),1===i.$?As:i.a?b(hb,t.ct,h,u,d):As]),c),$([_c(kf(t.ct))]))}var p,g=n.a;return M("input",C($([vb(t.ct),ts(Bs(g)),lb(r.r),as("it"),(p=r.p,1===p.$?As:rb(p.a))]),m),v)}(),w=y.a,x=y.b,j=y.c,L=b(es,2,Gc,f(Rn,Xc(Fs),Et($([g,p,function(){var r=t.cb;if(1===r.$)return v;var n,e,a,u=r.a,i=u.a,c=u.b;return $([(n=f(is,f(Rn,cb,C(h,C($([Qs(eb),as("notxt ppe"),Ws(b(Us,0,0,0,0)),ms(b(Us,0,0,0,0)),Ic(Fs),Xc(Fs),(e=""===t.ct?1:0,a=1-f(ef,1,f(Vn,0,e)),f(fs,Ps,f(Os,"transparency-"+ko(a),a)))]),i))),c),f(Js,4,n))])}()]))),Dc($([b(es,2,_f(w),Et($([$([qs(n),(u=t.aL,1===u.$?Ts({$:5,a:u.a}):As)]),x,c])),Dc(j))])));return s(Zs,f(Rn,f(xs,ws,"ctxt"),f(Rn,1===t.aL.$?As:Ks(5),f(Rn,gb,d))),t.aL,L)})({p:Mn,r:!1,x:{$:0,a:"text"}}),wb=e(function(r,n){return f(us,r,$([f(is,v,hs("Import style from Mapbox")),f(yb,v,{aL:f(zs,$([Jc,Xc(bs(100))]),hs("Style URL")),ap:jc,cb:Mn,ct:n.aQ}),f(yb,v,{aL:f(zs,$([Jc,Xc(bs(100))]),hs("Token")),ap:Lc,cb:Mn,ct:n.aS}),f(Cs,$([ms(s(ds,238,238,238)),ss(20)]),{aL:hs("Fetch style"),dT:ae(kc)}),f(is,v,hs("Or paste your style here:")),Oc({M:f(Fc,"",n.bz),bU:"100%",b2:"json",ap:ae(f(At,ie,zi)),cA:"100%"})]))}),xb=fo(5),kb=e(function(r,n){return{$:1,a:r,b:n}}),jb=function(r){return $(r.trim().split(/\s+/g))},Lb=e(function(r,n){return C(n,function(){switch(r.$){case 0:return"serif";case 1:return"sans-serif";case 2:return"monospace";case 3:case 4:return f(je,"-",jb(Qu(r.a)));default:return f(je,"-",jb(Qu(r.a.ac)))}}())}),Ab=f(Zi,is($([(bc=$([{$:2}]),f(fs,xb,f(kb,s(Dn,Lb,"ff-",bc),bc)))])),hs),qb={$:9},Eb=e(function(r,n){return b(es,4,Gc,f(Rn,Ts(qb),f(Rn,Xc(Fs),f(Rn,Ks(5),r))),Dc(n))}),Mb=e(function(r,n){return f(is,r,function(){var r=E(n.a1,n.M);if(r.a.$)return r.b.$?f(us,$([ss(20),Ks(20)]),$([f(Eb,v,$([hs("This is a tool that helps you generate elm-mapbox styles from Mapbox Studio.")])),f(Eb,v,$([hs("In Studio, hit the share button. This will give you the style url and token. This tool will attempt to generate an elm-mapbox style for you. It is not perfect, but should give a nice head-start. Try to compile the file and see if you get any errors.")])),f(Eb,v,$([hs("There are a few common limitations that are relatively easy to fix with some grepping. For example, "),Ab("Layer.lineJoin E.lineCapRound"),hs(" should be replaced by "),Ab("Layer.lineJoin E.lineJoinRound"),hs(". Also "),Ab("Layer.textField"),hs(" is often followed by "),Ab("E.toString"),hs(", but should instead be followed by "),Ab("E.toFormattedText"),hs(".")]))])):1===r.b.a.$?(e=r.b.a.a,f(Eb,$([Qs(s(ds,207,7,19)),ss(20)]),$([hs(e)]))):Oc({M:r.b.a.a,bU:"100%",b2:"elm",ap:Mn,cA:"50vw"});var e=r.a.a;return f(Eb,$([Qs(s(ds,207,7,19)),ss(20)]),$([hs(e)]))}())}),Sb={$:6,a:2},Tb=e(function(r,n){return{$:2,a:r,b:n}}),Cb=e(function(r,n){return{$:1,a:r,b:n}}),zb={cS:Mn,cZ:Mn,d8:ae({Y:3,Z:b(ls,155/255,203/255,1,1),b:E(0,0),ag:3})},Bb=e(function(r,n){switch(n.$){case 0:return(0,n.a)(2);case 1:return f(n.a.dB,r(n.a.ei),2);case 2:return jf(n.a);default:return jf("")}}),Rb=t(function(r,n,t){var a=function(r){var n,t,a,u;return{du:(u=(n=s(et,e(function(r,n){switch(r.$){case 0:return 1===n.dA.$?T(n,{dA:ae(r.a)}):n;case 1:return 1===n.du.$?T(n,{du:ae(r.a)}):n;default:return 1===n.b2.$?T(n,{b2:ae(r.a)}):n}}),{du:Mn,dA:Mn,b2:Mn},r)).du,1===u.$?zb:u.a),dA:(a=n.dA,1===a.$?1:a.a),b2:(t=n.b2,1===t.$?1:t.a)}}(r),u=2===a.b2?Tb(a):Cb(a);return f(Bb,u,b(es,2,Gc,n,Dc($([t]))))}),Nb=fo(4),_b={$:1},Pb=function(r){return{$:3,a:r}},Ob=function(){var r=$([Pb("Open Sans"),Pb("Helvetica"),Pb("Verdana"),_b]);return $([f(fs,ps,s(vs,"bg-color-"+gs(b(ls,1,1,1,0)),"background-color",b(ls,1,1,1,0))),f(fs,Ys,s(vs,"font-color-"+gs(b(ls,0,0,0,1)),"color",b(ls,0,0,0,1))),f(fs,Nb,(20,{$:2,a:20})),f(fs,xb,f(kb,s(Dn,Lb,"font-",r),r))])}(),Fb=t(function(r,n,e){return s(Rb,r.b5,f(Rn,as(f(je," ",$(["ui","s","e"]))),C(Ob,n)),e)})({b5:v}),Jb=Qr("rel"),Ib=e(function(r,n){var e=n.eE,t=n.aL;return b(es,2,_f("a"),f(Rn,ts(function(r){return f(io,"href",/^javascript:/i.test((n=r).replace(/\s/g,""))?"":n);var n}(e)),f(Rn,ts(Jb("noopener noreferrer")),f(Rn,Xc(Uc),f(Rn,Ic(Uc),f(Rn,as("ccx ccy"),r))))),Dc($([t])))}),Ub=e(function(r,n){return b(es,0,Gc,f(Rn,as("cl ccy"),f(Rn,Xc(Uc),f(Rn,Ic(Uc),r))),Dc(n))}),Xb=e(function(r,n){return f(fs,Vf,l(ab,"b-"+ke(r)+"-"+ke(n),n,r,n,r))}),Db=function(r){return f(Fb,$([Xc(Fs),Ic(Fs)]),f(us,$([Xc(Fs),Ic(Fs),Ks(20)]),$([f(Ub,$([Xc(Fs),Ic(bs(60)),ms(s(ds,238,238,238)),ss(20),Ws(s(ds,96,181,204)),({c1:2,dN:0,d1:0,ez:0},2,0,0,0,k(0,2)&&k(0,0)?k(0,0)?ub(0):f(Xb,0,0):f(fs,Vf,l(ab,"b-"+ke(0)+"-"+ke(0)+"-"+ke(2)+"-"+ke(0),0,0,2,0)))]),$([f(is,v,hs("Mapbox to Elm Style Converter")),f(Ib,$([Qs(s(ds,18,133,207)),Sb]),{aL:hs("GitHub"),eE:"https://github.com/gampleman/elm-mapbox/tree/master/style-generator"})])),f(Ub,$([Xc(Fs),Ic(Fs)]),$([f(wb,$([Ic(Fs),Xc(Fs),Ks(20),ss(20)]),r),f(Mb,$([Ic(Fs),Xc(Fs)]),r)]))])))};lc={Main:{init:kn({dG:function(){return E({M:Mn,a1:Mn,bz:Mn,aQ:"https://api.mapbox.com/styles/v1/mapbox/outdoors-v9",aS:"pk.eyJ1IjoiYXN0cm9zYXQiLCJhIjoiY2o3YWtjNnJzMGR6ajM3b2FidmNwaDNsaSJ9.lwWi7kOiejlT0RbD7RxtmA"},Te)},ej:function(){return Be(Ce)},eD:xc,eG:function(r){return{cX:$([Db(r)]),ey:"Style Generator"}}})(Ft(0))(0)}},r.Elm?function r(n,e){for(var t in e)t in n?"init"==t?R(6):r(n[t],e[t]):n[t]=e[t]}(r.Elm,lc):r.Elm=lc}(this);
+},{}],"FRly":[function(require,module,exports) {
+"use strict";exports.byteLength=u,exports.toByteArray=i,exports.fromByteArray=d;for(var r=[],t=[],e="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,a=n.length;o<a;++o)r[o]=n[o],t[n.charCodeAt(o)]=o;function h(r){var t=r.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=r.indexOf("=");return-1===e&&(e=t),[e,e===t?0:4-e%4]}function u(r){var t=h(r),e=t[0],n=t[1];return 3*(e+n)/4-n}function c(r,t,e){return 3*(t+e)/4-e}function i(r){for(var n,o=h(r),a=o[0],u=o[1],i=new e(c(r,a,u)),f=0,A=u>0?a-4:a,d=0;d<A;d+=4)n=t[r.charCodeAt(d)]<<18|t[r.charCodeAt(d+1)]<<12|t[r.charCodeAt(d+2)]<<6|t[r.charCodeAt(d+3)],i[f++]=n>>16&255,i[f++]=n>>8&255,i[f++]=255&n;return 2===u&&(n=t[r.charCodeAt(d)]<<2|t[r.charCodeAt(d+1)]>>4,i[f++]=255&n),1===u&&(n=t[r.charCodeAt(d)]<<10|t[r.charCodeAt(d+1)]<<4|t[r.charCodeAt(d+2)]>>2,i[f++]=n>>8&255,i[f++]=255&n),i}function f(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function A(r,t,e){for(var n,o=[],a=t;a<e;a+=3)n=(r[a]<<16&16711680)+(r[a+1]<<8&65280)+(255&r[a+2]),o.push(f(n));return o.join("")}function d(t){for(var e,n=t.length,o=n%3,a=[],h=0,u=n-o;h<u;h+=16383)a.push(A(t,h,h+16383>u?u:h+16383));return 1===o?(e=t[n-1],a.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],a.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),a.join("")}t["-".charCodeAt(0)]=62,t["_".charCodeAt(0)]=63;
+},{}],"Quj6":[function(require,module,exports) {
+exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<<w)-1,e=f>>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:1/0*(s?-1:1);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<<e)-1,N=i>>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=o<0||0===o&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),(o+=p+N>=1?n/f:n*Math.pow(2,1-N))*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<<h|w,e+=h;e>0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l};
+},{}],"aq/z":[function(require,module,exports) {
+var r={}.toString;module.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)};
+},{}],"aMB2":[function(require,module,exports) {
+
+var global = arguments[3];
+var t=arguments[3],r=require("base64-js"),e=require("ieee754"),n=require("isarray");function i(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(r){return!1}}function o(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function u(t,r){if(o()<r)throw new RangeError("Invalid typed array length");return f.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(r)).__proto__=f.prototype:(null===t&&(t=new f(r)),t.length=r),t}function f(t,r,e){if(!(f.TYPED_ARRAY_SUPPORT||this instanceof f))return new f(t,r,e);if("number"==typeof t){if("string"==typeof r)throw new Error("If encoding is specified then the first argument must be a string");return c(this,t)}return s(this,t,r,e)}function s(t,r,e,n){if("number"==typeof r)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&r instanceof ArrayBuffer?g(t,r,e,n):"string"==typeof r?l(t,r,e):y(t,r)}function h(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function a(t,r,e,n){return h(r),r<=0?u(t,r):void 0!==e?"string"==typeof n?u(t,r).fill(e,n):u(t,r).fill(e):u(t,r)}function c(t,r){if(h(r),t=u(t,r<0?0:0|w(r)),!f.TYPED_ARRAY_SUPPORT)for(var e=0;e<r;++e)t[e]=0;return t}function l(t,r,e){if("string"==typeof e&&""!==e||(e="utf8"),!f.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var n=0|v(r,e),i=(t=u(t,n)).write(r,e);return i!==n&&(t=t.slice(0,i)),t}function p(t,r){var e=r.length<0?0:0|w(r.length);t=u(t,e);for(var n=0;n<e;n+=1)t[n]=255&r[n];return t}function g(t,r,e,n){if(r.byteLength,e<0||r.byteLength<e)throw new RangeError("'offset' is out of bounds");if(r.byteLength<e+(n||0))throw new RangeError("'length' is out of bounds");return r=void 0===e&&void 0===n?new Uint8Array(r):void 0===n?new Uint8Array(r,e):new Uint8Array(r,e,n),f.TYPED_ARRAY_SUPPORT?(t=r).__proto__=f.prototype:t=p(t,r),t}function y(t,r){if(f.isBuffer(r)){var e=0|w(r.length);return 0===(t=u(t,e)).length?t:(r.copy(t,0,0,e),t)}if(r){if("undefined"!=typeof ArrayBuffer&&r.buffer instanceof ArrayBuffer||"length"in r)return"number"!=typeof r.length||W(r.length)?u(t,0):p(t,r);if("Buffer"===r.type&&n(r.data))return p(t,r.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function w(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function d(t){return+t!=t&&(t=0),f.alloc(+t)}function v(t,r){if(f.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var e=t.length;if(0===e)return 0;for(var n=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":case void 0:return $(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return K(t).length;default:if(n)return $(t).length;r=(""+r).toLowerCase(),n=!0}}function E(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(r>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return x(this,r,e);case"utf8":case"utf-8":return Y(this,r,e);case"ascii":return L(this,r,e);case"latin1":case"binary":return D(this,r,e);case"base64":return S(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function b(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function R(t,r,e,n,i){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,isNaN(e)&&(e=i?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(i)return-1;e=t.length-1}else if(e<0){if(!i)return-1;e=0}if("string"==typeof r&&(r=f.from(r,n)),f.isBuffer(r))return 0===r.length?-1:_(t,r,e,n,i);if("number"==typeof r)return r&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):_(t,[r],e,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,r,e,n,i){var o,u=1,f=t.length,s=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,f/=2,s/=2,e/=2}function h(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}if(i){var a=-1;for(o=e;o<f;o++)if(h(t,o)===h(r,-1===a?0:o-a)){if(-1===a&&(a=o),o-a+1===s)return a*u}else-1!==a&&(o-=o-a),a=-1}else for(e+s>f&&(e=f-s),o=e;o>=0;o--){for(var c=!0,l=0;l<s;l++)if(h(t,o+l)!==h(r,l)){c=!1;break}if(c)return o}return-1}function A(t,r,e,n){e=Number(e)||0;var i=t.length-e;n?(n=Number(n))>i&&(n=i):n=i;var o=r.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var u=0;u<n;++u){var f=parseInt(r.substr(2*u,2),16);if(isNaN(f))return u;t[e+u]=f}return u}function m(t,r,e,n){return Q($(r,t.length-e),t,e,n)}function P(t,r,e,n){return Q(G(r),t,e,n)}function T(t,r,e,n){return P(t,r,e,n)}function B(t,r,e,n){return Q(K(r),t,e,n)}function U(t,r,e,n){return Q(H(r,t.length-e),t,e,n)}function S(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function Y(t,r,e){e=Math.min(t.length,e);for(var n=[],i=r;i<e;){var o,u,f,s,h=t[i],a=null,c=h>239?4:h>223?3:h>191?2:1;if(i+c<=e)switch(c){case 1:h<128&&(a=h);break;case 2:128==(192&(o=t[i+1]))&&(s=(31&h)<<6|63&o)>127&&(a=s);break;case 3:o=t[i+1],u=t[i+2],128==(192&o)&&128==(192&u)&&(s=(15&h)<<12|(63&o)<<6|63&u)>2047&&(s<55296||s>57343)&&(a=s);break;case 4:o=t[i+1],u=t[i+2],f=t[i+3],128==(192&o)&&128==(192&u)&&128==(192&f)&&(s=(15&h)<<18|(63&o)<<12|(63&u)<<6|63&f)>65535&&s<1114112&&(a=s)}null===a?(a=65533,c=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=c}return O(n)}exports.Buffer=f,exports.SlowBuffer=d,exports.INSPECT_MAX_BYTES=50,f.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:i(),exports.kMaxLength=o(),f.poolSize=8192,f._augment=function(t){return t.__proto__=f.prototype,t},f.from=function(t,r,e){return s(null,t,r,e)},f.TYPED_ARRAY_SUPPORT&&(f.prototype.__proto__=Uint8Array.prototype,f.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&f[Symbol.species]===f&&Object.defineProperty(f,Symbol.species,{value:null,configurable:!0})),f.alloc=function(t,r,e){return a(null,t,r,e)},f.allocUnsafe=function(t){return c(null,t)},f.allocUnsafeSlow=function(t){return c(null,t)},f.isBuffer=function(t){return!(null==t||!t._isBuffer)},f.compare=function(t,r){if(!f.isBuffer(t)||!f.isBuffer(r))throw new TypeError("Arguments must be Buffers");if(t===r)return 0;for(var e=t.length,n=r.length,i=0,o=Math.min(e,n);i<o;++i)if(t[i]!==r[i]){e=t[i],n=r[i];break}return e<n?-1:n<e?1:0},f.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},f.concat=function(t,r){if(!n(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return f.alloc(0);var e;if(void 0===r)for(r=0,e=0;e<t.length;++e)r+=t[e].length;var i=f.allocUnsafe(r),o=0;for(e=0;e<t.length;++e){var u=t[e];if(!f.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(i,o),o+=u.length}return i},f.byteLength=v,f.prototype._isBuffer=!0,f.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var r=0;r<t;r+=2)b(this,r,r+1);return this},f.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var r=0;r<t;r+=4)b(this,r,r+3),b(this,r+1,r+2);return this},f.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var r=0;r<t;r+=8)b(this,r,r+7),b(this,r+1,r+6),b(this,r+2,r+5),b(this,r+3,r+4);return this},f.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Y(this,0,t):E.apply(this,arguments)},f.prototype.equals=function(t){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===f.compare(this,t)},f.prototype.inspect=function(){var t="",r=exports.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},f.prototype.compare=function(t,r,e,n,i){if(!f.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),r<0||e>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&r>=e)return 0;if(n>=i)return-1;if(r>=e)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),u=(e>>>=0)-(r>>>=0),s=Math.min(o,u),h=this.slice(n,i),a=t.slice(r,e),c=0;c<s;++c)if(h[c]!==a[c]){o=h[c],u=a[c];break}return o<u?-1:u<o?1:0},f.prototype.includes=function(t,r,e){return-1!==this.indexOf(t,r,e)},f.prototype.indexOf=function(t,r,e){return R(this,t,r,e,!0)},f.prototype.lastIndexOf=function(t,r,e){return R(this,t,r,e,!1)},f.prototype.write=function(t,r,e,n){if(void 0===r)n="utf8",e=this.length,r=0;else if(void 0===e&&"string"==typeof r)n=r,e=this.length,r=0;else{if(!isFinite(r))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");r|=0,isFinite(e)?(e|=0,void 0===n&&(n="utf8")):(n=e,e=void 0)}var i=this.length-r;if((void 0===e||e>i)&&(e=i),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return A(this,t,r,e);case"utf8":case"utf-8":return m(this,t,r,e);case"ascii":return P(this,t,r,e);case"latin1":case"binary":return T(this,t,r,e);case"base64":return B(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return U(this,t,r,e);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var I=4096;function O(t){var r=t.length;if(r<=I)return String.fromCharCode.apply(String,t);for(var e="",n=0;n<r;)e+=String.fromCharCode.apply(String,t.slice(n,n+=I));return e}function L(t,r,e){var n="";e=Math.min(t.length,e);for(var i=r;i<e;++i)n+=String.fromCharCode(127&t[i]);return n}function D(t,r,e){var n="";e=Math.min(t.length,e);for(var i=r;i<e;++i)n+=String.fromCharCode(t[i]);return n}function x(t,r,e){var n=t.length;(!r||r<0)&&(r=0),(!e||e<0||e>n)&&(e=n);for(var i="",o=r;o<e;++o)i+=Z(t[o]);return i}function C(t,r,e){for(var n=t.slice(r,e),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function M(t,r,e){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+r>e)throw new RangeError("Trying to access beyond buffer length")}function k(t,r,e,n,i,o){if(!f.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>i||r<o)throw new RangeError('"value" argument is out of bounds');if(e+n>t.length)throw new RangeError("Index out of range")}function N(t,r,e,n){r<0&&(r=65535+r+1);for(var i=0,o=Math.min(t.length-e,2);i<o;++i)t[e+i]=(r&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function z(t,r,e,n){r<0&&(r=4294967295+r+1);for(var i=0,o=Math.min(t.length-e,4);i<o;++i)t[e+i]=r>>>8*(n?i:3-i)&255}function F(t,r,e,n,i,o){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function j(t,r,n,i,o){return o||F(t,r,n,4,3.4028234663852886e38,-3.4028234663852886e38),e.write(t,r,n,i,23,4),n+4}function q(t,r,n,i,o){return o||F(t,r,n,8,1.7976931348623157e308,-1.7976931348623157e308),e.write(t,r,n,i,52,8),n+8}f.prototype.slice=function(t,r){var e,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r<t&&(r=t),f.TYPED_ARRAY_SUPPORT)(e=this.subarray(t,r)).__proto__=f.prototype;else{var i=r-t;e=new f(i,void 0);for(var o=0;o<i;++o)e[o]=this[o+t]}return e},f.prototype.readUIntLE=function(t,r,e){t|=0,r|=0,e||M(t,r,this.length);for(var n=this[t],i=1,o=0;++o<r&&(i*=256);)n+=this[t+o]*i;return n},f.prototype.readUIntBE=function(t,r,e){t|=0,r|=0,e||M(t,r,this.length);for(var n=this[t+--r],i=1;r>0&&(i*=256);)n+=this[t+--r]*i;return n},f.prototype.readUInt8=function(t,r){return r||M(t,1,this.length),this[t]},f.prototype.readUInt16LE=function(t,r){return r||M(t,2,this.length),this[t]|this[t+1]<<8},f.prototype.readUInt16BE=function(t,r){return r||M(t,2,this.length),this[t]<<8|this[t+1]},f.prototype.readUInt32LE=function(t,r){return r||M(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},f.prototype.readUInt32BE=function(t,r){return r||M(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},f.prototype.readIntLE=function(t,r,e){t|=0,r|=0,e||M(t,r,this.length);for(var n=this[t],i=1,o=0;++o<r&&(i*=256);)n+=this[t+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*r)),n},f.prototype.readIntBE=function(t,r,e){t|=0,r|=0,e||M(t,r,this.length);for(var n=r,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*r)),o},f.prototype.readInt8=function(t,r){return r||M(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},f.prototype.readInt16LE=function(t,r){r||M(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt16BE=function(t,r){r||M(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},f.prototype.readInt32LE=function(t,r){return r||M(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},f.prototype.readInt32BE=function(t,r){return r||M(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},f.prototype.readFloatLE=function(t,r){return r||M(t,4,this.length),e.read(this,t,!0,23,4)},f.prototype.readFloatBE=function(t,r){return r||M(t,4,this.length),e.read(this,t,!1,23,4)},f.prototype.readDoubleLE=function(t,r){return r||M(t,8,this.length),e.read(this,t,!0,52,8)},f.prototype.readDoubleBE=function(t,r){return r||M(t,8,this.length),e.read(this,t,!1,52,8)},f.prototype.writeUIntLE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||k(this,t,r,e,Math.pow(2,8*e)-1,0);var i=1,o=0;for(this[r]=255&t;++o<e&&(i*=256);)this[r+o]=t/i&255;return r+e},f.prototype.writeUIntBE=function(t,r,e,n){(t=+t,r|=0,e|=0,n)||k(this,t,r,e,Math.pow(2,8*e)-1,0);var i=e-1,o=1;for(this[r+i]=255&t;--i>=0&&(o*=256);)this[r+i]=t/o&255;return r+e},f.prototype.writeUInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,255,0),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[r]=255&t,r+1},f.prototype.writeUInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):N(this,t,r,!0),r+2},f.prototype.writeUInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):N(this,t,r,!1),r+2},f.prototype.writeUInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t):z(this,t,r,!0),r+4},f.prototype.writeUInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):z(this,t,r,!1),r+4},f.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r|=0,!n){var i=Math.pow(2,8*e-1);k(this,t,r,e,i-1,-i)}var o=0,u=1,f=0;for(this[r]=255&t;++o<e&&(u*=256);)t<0&&0===f&&0!==this[r+o-1]&&(f=1),this[r+o]=(t/u>>0)-f&255;return r+e},f.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r|=0,!n){var i=Math.pow(2,8*e-1);k(this,t,r,e,i-1,-i)}var o=e-1,u=1,f=0;for(this[r+o]=255&t;--o>=0&&(u*=256);)t<0&&0===f&&0!==this[r+o+1]&&(f=1),this[r+o]=(t/u>>0)-f&255;return r+e},f.prototype.writeInt8=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,1,127,-128),f.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[r]=255&t,r+1},f.prototype.writeInt16LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8):N(this,t,r,!0),r+2},f.prototype.writeInt16BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>8,this[r+1]=255&t):N(this,t,r,!1),r+2},f.prototype.writeInt32LE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24):z(this,t,r,!0),r+4},f.prototype.writeInt32BE=function(t,r,e){return t=+t,r|=0,e||k(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),f.TYPED_ARRAY_SUPPORT?(this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t):z(this,t,r,!1),r+4},f.prototype.writeFloatLE=function(t,r,e){return j(this,t,r,!0,e)},f.prototype.writeFloatBE=function(t,r,e){return j(this,t,r,!1,e)},f.prototype.writeDoubleLE=function(t,r,e){return q(this,t,r,!0,e)},f.prototype.writeDoubleBE=function(t,r,e){return q(this,t,r,!1,e)},f.prototype.copy=function(t,r,e,n){if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n<e&&(n=e),n===e)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(e<0||e>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r<n-e&&(n=t.length-r+e);var i,o=n-e;if(this===t&&e<r&&r<n)for(i=o-1;i>=0;--i)t[i+r]=this[i+e];else if(o<1e3||!f.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)t[i+r]=this[i+e];else Uint8Array.prototype.set.call(t,this.subarray(e,e+o),r);return o},f.prototype.fill=function(t,r,e,n){if("string"==typeof t){if("string"==typeof r?(n=r,r=0,e=this.length):"string"==typeof e&&(n=e,e=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!f.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(r<0||this.length<r||this.length<e)throw new RangeError("Out of range index");if(e<=r)return this;var o;if(r>>>=0,e=void 0===e?this.length:e>>>0,t||(t=0),"number"==typeof t)for(o=r;o<e;++o)this[o]=t;else{var u=f.isBuffer(t)?t:$(new f(t,n).toString()),s=u.length;for(o=0;o<e-r;++o)this[o+r]=u[o%s]}return this};var V=/[^+\/0-9A-Za-z-_]/g;function X(t){if((t=J(t).replace(V,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}function J(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function Z(t){return t<16?"0"+t.toString(16):t.toString(16)}function $(t,r){var e;r=r||1/0;for(var n=t.length,i=null,o=[],u=0;u<n;++u){if((e=t.charCodeAt(u))>55295&&e<57344){if(!i){if(e>56319){(r-=3)>-1&&o.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&o.push(239,191,189);continue}i=e;continue}if(e<56320){(r-=3)>-1&&o.push(239,191,189),i=e;continue}e=65536+(i-55296<<10|e-56320)}else i&&(r-=3)>-1&&o.push(239,191,189);if(i=null,e<128){if((r-=1)<0)break;o.push(e)}else if(e<2048){if((r-=2)<0)break;o.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;o.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;o.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return o}function G(t){for(var r=[],e=0;e<t.length;++e)r.push(255&t.charCodeAt(e));return r}function H(t,r){for(var e,n,i,o=[],u=0;u<t.length&&!((r-=2)<0);++u)n=(e=t.charCodeAt(u))>>8,i=e%256,o.push(i),o.push(n);return o}function K(t){return r.toByteArray(X(t))}function Q(t,r,e,n){for(var i=0;i<n&&!(i+e>=r.length||i>=t.length);++i)r[i+e]=t[i];return i}function W(t){return t!=t}
+},{"base64-js":"FRly","ieee754":"Quj6","isarray":"aq/z","buffer":"aMB2"}],"WCBj":[function(require,module,exports) {
+var define;
+var global = arguments[3];
+var Buffer = require("buffer").Buffer;
+var e,t=arguments[3],r=require("buffer").Buffer;!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof e&&e.amd?e(["exports"],r):r(t.mapboxGlStyleSpecification={})}(this,function(e){"use strict";var n={$version:8,$root:{version:{required:!0,type:"enum",values:[8],doc:"Style specification version number. Must be 8.",example:8},name:{type:"string",doc:"A human-readable name for the style.",example:"Bright"},metadata:{type:"*",doc:"Arbitrary properties useful to track with the stylesheet, but do not influence rendering. Properties should be prefixed to avoid collisions, like 'mapbox:'."},center:{type:"array",value:"number",doc:"Default map center in longitude and latitude. The style center will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",example:[-73.9749,40.7736]},zoom:{type:"number",doc:"Default zoom level. The style zoom will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",example:12.5},bearing:{type:"number",default:0,period:360,units:"degrees",doc:'Default bearing, in degrees. The bearing is the compass direction that is "up"; for example, a bearing of 90° orients the map so that east is up. This value will be used only if the map has not been positioned by other means (e.g. map options or user interaction).',example:29},pitch:{type:"number",default:0,units:"degrees",doc:"Default pitch, in degrees. Zero is perpendicular to the surface, for a look straight down at the map, while a greater value like 60 looks ahead towards the horizon. The style pitch will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",example:50},light:{type:"light",doc:"The global light source.",example:{anchor:"viewport",color:"white",intensity:.4}},sources:{required:!0,type:"sources",doc:"Data source specifications.",example:{"mapbox-streets":{type:"vector",url:"mapbox://mapbox.mapbox-streets-v6"}}},sprite:{type:"string",doc:"A base URL for retrieving the sprite image and metadata. The extensions `.png`, `.json` and scale factor `@2x.png` will be automatically appended. This property is required if any layer uses the `background-pattern`, `fill-pattern`, `line-pattern`, `fill-extrusion-pattern`, or `icon-image` properties. The URL must be absolute, containing the [scheme, authority and path components](https://en.wikipedia.org/wiki/URL#Syntax).",example:"mapbox://sprites/mapbox/bright-v8"},glyphs:{type:"string",doc:"A URL template for loading signed-distance-field glyph sets in PBF format. The URL must include `{fontstack}` and `{range}` tokens. This property is required if any layer uses the `text-field` layout property. The URL must be absolute, containing the [scheme, authority and path components](https://en.wikipedia.org/wiki/URL#Syntax).",example:"mapbox://fonts/mapbox/{fontstack}/{range}.pbf"},transition:{type:"transition",doc:"A global transition definition to use as a default across properties, to be used for timing transitions between one value and the next when no property-specific transition is set. Collision-based symbol fading is controlled independently of the style's `transition` property.",example:{duration:300,delay:0}},layers:{required:!0,type:"array",value:"layer",doc:"Layers will be drawn in the order of this array.",example:[{id:"water",source:"mapbox-streets","source-layer":"water",type:"fill",paint:{"fill-color":"#00ffff"}}]}},sources:{"*":{type:"source",doc:"Specification of a data source. For vector and raster sources, either TileJSON or a URL to a TileJSON must be provided. For image and video sources, a URL must be provided. For GeoJSON sources, a URL or inline GeoJSON must be provided."}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{doc:"A vector tile source."}},doc:"The type of the source."},url:{type:"string",doc:"A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<mapid>`."},tiles:{type:"array",value:"string",doc:"An array of one or more tile source URLs, as in the TileJSON spec."},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129],doc:"An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."},scheme:{type:"enum",values:{xyz:{doc:"Slippy map tilenames scheme."},tms:{doc:"OSGeo spec scheme."}},default:"xyz",doc:"Influences the y direction of the tile coordinates. The global-mercator (aka Spherical Mercator) profile is assumed."},minzoom:{type:"number",default:0,doc:"Minimum zoom level for which tiles are available, as in the TileJSON spec."},maxzoom:{type:"number",default:22,doc:"Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."},attribution:{type:"string",doc:"Contains an attribution to be displayed when the map is shown to a user."},"*":{type:"*",doc:"Other keys to configure the data source."}},source_raster:{type:{required:!0,type:"enum",values:{raster:{doc:"A raster tile source."}},doc:"The type of the source."},url:{type:"string",doc:"A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<mapid>`."},tiles:{type:"array",value:"string",doc:"An array of one or more tile source URLs, as in the TileJSON spec."},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129],doc:"An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."},minzoom:{type:"number",default:0,doc:"Minimum zoom level for which tiles are available, as in the TileJSON spec."},maxzoom:{type:"number",default:22,doc:"Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."},tileSize:{type:"number",default:512,units:"pixels",doc:"The minimum visual size to display tiles for this layer. Only configurable for raster layers."},scheme:{type:"enum",values:{xyz:{doc:"Slippy map tilenames scheme."},tms:{doc:"OSGeo spec scheme."}},default:"xyz",doc:"Influences the y direction of the tile coordinates. The global-mercator (aka Spherical Mercator) profile is assumed."},attribution:{type:"string",doc:"Contains an attribution to be displayed when the map is shown to a user."},"*":{type:"*",doc:"Other keys to configure the data source."}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{doc:"A RGB-encoded raster DEM source"}},doc:"The type of the source."},url:{type:"string",doc:"A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<mapid>`."},tiles:{type:"array",value:"string",doc:"An array of one or more tile source URLs, as in the TileJSON spec."},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129],doc:"An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."},minzoom:{type:"number",default:0,doc:"Minimum zoom level for which tiles are available, as in the TileJSON spec."},maxzoom:{type:"number",default:22,doc:"Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."},tileSize:{type:"number",default:512,units:"pixels",doc:"The minimum visual size to display tiles for this layer. Only configurable for raster layers."},attribution:{type:"string",doc:"Contains an attribution to be displayed when the map is shown to a user."},encoding:{type:"enum",values:{terrarium:{doc:"Terrarium format PNG tiles. See https://aws.amazon.com/es/public-datasets/terrain/ for more info."},mapbox:{doc:"Mapbox Terrain RGB tiles. See https://www.mapbox.com/help/access-elevation-data/#mapbox-terrain-rgb for more info."}},default:"mapbox",doc:"The encoding used by this source. Mapbox Terrain RGB is used by default"},"*":{type:"*",doc:"Other keys to configure the data source."}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{doc:"A GeoJSON data source."}},doc:"The data type of the GeoJSON source."},data:{type:"*",doc:"A URL to a GeoJSON file, or inline GeoJSON."},maxzoom:{type:"number",default:18,doc:"Maximum zoom level at which to create vector tiles (higher means greater detail at high zoom levels)."},attribution:{type:"string",doc:"Contains an attribution to be displayed when the map is shown to a user."},buffer:{type:"number",default:128,maximum:512,minimum:0,doc:"Size of the tile buffer on each side. A value of 0 produces no buffer. A value of 512 produces a buffer as wide as the tile itself. Larger values produce fewer rendering artifacts near tile edges and slower performance."},tolerance:{type:"number",default:.375,doc:"Douglas-Peucker simplification tolerance (higher means simpler geometries and faster performance)."},cluster:{type:"boolean",default:!1,doc:"If the data is a collection of point features, setting this to true clusters the points by radius into groups. Cluster groups become new `Point` features in the source with additional properties:\n * `cluster` Is `true` if the point is a cluster \n * `cluster_id` A unqiue id for the cluster to be used in conjunction with the [cluster inspection methods](https://www.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterexpansionzoom)\n * `point_count` Number of original points grouped into this cluster\n * `point_count_abbreviated` An abbreviated point count"},clusterRadius:{type:"number",default:50,minimum:0,doc:"Radius of each cluster if clustering is enabled. A value of 512 indicates a radius equal to the width of a tile."},clusterMaxZoom:{type:"number",doc:"Max zoom on which to cluster points if clustering is enabled. Defaults to one zoom less than maxzoom (so that last zoom features are not clustered)."},lineMetrics:{type:"boolean",default:!1,doc:"Whether to calculate line distance metrics. This is required for line layers that specify `line-gradient` values."},generateId:{type:"boolean",default:!1,doc:"Whether to generate ids for the geojson features. When enabled, the `feature.id` property will be auto assigned based on its index in the `features` array, over-writing any previous values."}},source_video:{type:{required:!0,type:"enum",values:{video:{doc:"A video data source."}},doc:"The data type of the video source."},urls:{required:!0,type:"array",value:"string",doc:"URLs to video content in order of preferred format."},coordinates:{required:!0,doc:"Corners of video specified in longitude, latitude pairs.",type:"array",length:4,value:{type:"array",length:2,value:"number",doc:"A single longitude, latitude pair."}}},source_image:{type:{required:!0,type:"enum",values:{image:{doc:"An image data source."}},doc:"The data type of the image source."},url:{required:!0,type:"string",doc:"URL that points to an image."},coordinates:{required:!0,doc:"Corners of image specified in longitude, latitude pairs.",type:"array",length:4,value:{type:"array",length:2,value:"number",doc:"A single longitude, latitude pair."}}},layer:{id:{type:"string",doc:"Unique layer name.",required:!0},type:{type:"enum",values:{fill:{doc:"A filled polygon with an optional stroked border.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}},line:{doc:"A stroked line.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}},symbol:{doc:"An icon or a text label.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}},circle:{doc:"A filled circle.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}},heatmap:{doc:"A heatmap.","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"fill-extrusion":{doc:"An extruded (3D) polygon.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}}},raster:{doc:"Raster map textures such as satellite imagery.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}},hillshade:{doc:"Client-side hillshading visualization based on DEM data. Currently, the implementation only supports Mapbox Terrain RGB and Mapzen Terrarium tiles.","sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},background:{doc:"The background color or pattern of the map.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}}}},doc:"Rendering type of this layer.",required:!0},metadata:{type:"*",doc:"Arbitrary properties useful to track with the layer, but do not influence rendering. Properties should be prefixed to avoid collisions, like 'mapbox:'."},source:{type:"string",doc:"Name of a source description to be used for this layer. Required for all layer types except `background`."},"source-layer":{type:"string",doc:"Layer to use from a vector tile source. Required for vector tile sources; prohibited for all other source types, including GeoJSON sources."},minzoom:{type:"number",minimum:0,maximum:24,doc:"The minimum zoom level for the layer. At zoom levels less than the minzoom, the layer will be hidden."},maxzoom:{type:"number",minimum:0,maximum:24,doc:"The maximum zoom level for the layer. At zoom levels equal to or greater than the maxzoom, the layer will be hidden."},filter:{type:"filter",doc:"A expression specifying conditions on source features. Only features that match the filter are displayed. Zoom expressions in filters are only evaluated at integer zoom levels. The `feature-state` expression is not supported in filter expressions."},layout:{type:"layout",doc:"Layout properties for the layer."},paint:{type:"paint",doc:"Default paint properties for this layer."}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},"property-type":"constant"}},layout_fill:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},"property-type":"constant"}},layout_circle:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},"property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}},"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{doc:"A cap with a squared-off end which is drawn to the exact endpoint of the line."},round:{doc:"A cap with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line."},square:{doc:"A cap with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width."}},default:"butt",doc:"The display of line endings.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{doc:"A join with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width."},round:{doc:"A join with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line."},miter:{doc:"A join with a sharp, angled corner which is drawn with the outer sides beyond the endpoint of the path until they meet."}},default:"miter",doc:"The display of lines when joining.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.40.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,doc:"Used to automatically convert miter joins to bevel joins for sharp angles.",requires:[{"line-join":"miter"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,doc:"Used to automatically convert round joins to miter joins for shallow angles.",requires:[{"line-join":"round"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},"property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{doc:"The label is placed at the point where the geometry is located."},line:{doc:"The label is placed along the line of the geometry. Can only be used on `LineString` and `Polygon` geometries."},"line-center":{doc:"The label is placed at the center of the line of the geometry. Can only be used on `LineString` and `Polygon` geometries. Note that a single feature in a vector tile may contain multiple line geometries."}},default:"point",doc:"Label placement relative to its geometry.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"`line-center` value":{js:"0.47.0",android:"6.4.0",ios:"4.3.0",macos:"0.10.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",doc:"Distance between two symbol anchors.",requires:[{"symbol-placement":"line"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,doc:"If true, the symbols will not cross tile edges to avoid mutual collisions. Recommended in layers that don't have enough padding in the vector tile to prevent collisions, or if it is a point symbol layer placed after a line symbol layer.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-z-order":{type:"enum",values:{"viewport-y":{doc:"Symbols will be sorted by their y-position relative to the viewport."},source:{doc:"Symbols will be rendered in the same order as the source data with no sorting applied."}},default:"viewport-y",doc:"Controls the order in which overlapping symbols in the same layer are rendered","sdk-support":{"basic functionality":{js:"0.49.0",android:"6.6.0",ios:"4.5.0",macos:"0.12.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,doc:"If true, the icon will be visible even if it collides with other previously drawn symbols.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,doc:"If true, other symbols can be visible even if they collide with the icon.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,doc:"If true, text will display without their corresponding icons when the icon collides with other symbols and the text does not.",requires:["icon-image","text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{doc:"When `symbol-placement` is set to `point`, aligns icons east-west. When `symbol-placement` is set to `line` or `line-center`, aligns icon x-axes with the line."},viewport:{doc:"Produces icons whose x-axes are aligned with the x-axis of the viewport, regardless of the value of `symbol-placement`."},auto:{doc:"When `symbol-placement` is set to `point`, this is equivalent to `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is equivalent to `map`."}},default:"auto",doc:"In combination with `symbol-placement`, determines the rotation behavior of icons.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"`auto` value":{js:"0.25.0",android:"4.2.0",ios:"3.4.0",macos:"0.3.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",doc:"Scales the original size of the icon by the provided factor. The new pixel size of the image will be the original pixel size multiplied by `icon-size`. 1 is the original size; 3 triples the size of the image.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.35.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{doc:"The icon is displayed at its intrinsic aspect ratio."},width:{doc:"The icon is scaled in the x-dimension to fit the width of the text."},height:{doc:"The icon is scaled in the y-dimension to fit the height of the text."},both:{doc:"The icon is scaled in both x- and y-dimensions."}},default:"none",doc:"Scales the icon to fit around the associated text.",requires:["icon-image","text-field"],"sdk-support":{"basic functionality":{js:"0.21.0",android:"4.2.0",ios:"3.4.0",macos:"0.2.1"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",doc:"Size of the additional area added to dimensions determined by `icon-text-fit`, in clockwise order: top, right, bottom, left.",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],"sdk-support":{"basic functionality":{js:"0.21.0",android:"4.2.0",ios:"3.4.0",macos:"0.2.1"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"string",doc:"Name of image in sprite to use for drawing an image background.",tokens:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.35.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",doc:"Rotates the icon clockwise.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.21.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",doc:"Size of the additional area around the icon bounding box used for detecting symbol collisions.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,doc:"If true, the icon may be flipped to prevent it from being rendered upside-down.",requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],doc:"Offset distance of icon from its anchor. Positive values indicate right and down, while negative values indicate left and up. Each component is multiplied by the value of `icon-size` to obtain the final offset in pixels. When combined with `icon-rotate` the offset will be as if the rotated direction was up.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{doc:"The center of the icon is placed closest to the anchor."},left:{doc:"The left side of the icon is placed closest to the anchor."},right:{doc:"The right side of the icon is placed closest to the anchor."},top:{doc:"The top of the icon is placed closest to the anchor."},bottom:{doc:"The bottom of the icon is placed closest to the anchor."},"top-left":{doc:"The top left corner of the icon is placed closest to the anchor."},"top-right":{doc:"The top right corner of the icon is placed closest to the anchor."},"bottom-left":{doc:"The bottom left corner of the icon is placed closest to the anchor."},"bottom-right":{doc:"The bottom right corner of the icon is placed closest to the anchor."}},default:"center",doc:"Part of the icon placed closest to the anchor.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.40.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"},"data-driven styling":{js:"0.40.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{doc:"The icon is aligned to the plane of the map."},viewport:{doc:"The icon is aligned to the plane of the viewport."},auto:{doc:"Automatically matches the value of `icon-rotation-alignment`."}},default:"auto",doc:"Orientation of icon when map is pitched.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.39.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{doc:"The text is aligned to the plane of the map."},viewport:{doc:"The text is aligned to the plane of the viewport."},auto:{doc:"Automatically matches the value of `text-rotation-alignment`."}},default:"auto",doc:"Orientation of text when map is pitched.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.21.0",android:"4.2.0",ios:"3.4.0",macos:"0.2.1"},"`auto` value":{js:"0.25.0",android:"4.2.0",ios:"3.4.0",macos:"0.3.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{doc:"When `symbol-placement` is set to `point`, aligns text east-west. When `symbol-placement` is set to `line` or `line-center`, aligns text x-axes with the line."},viewport:{doc:"Produces glyphs whose x-axes are aligned with the x-axis of the viewport, regardless of the value of `symbol-placement`."},auto:{doc:"When `symbol-placement` is set to `point`, this is equivalent to `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is equivalent to `map`."}},default:"auto",doc:"In combination with `symbol-placement`, determines the rotation behavior of the individual glyphs forming the text.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"`auto` value":{js:"0.25.0",android:"4.2.0",ios:"3.4.0",macos:"0.3.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,doc:"Value to use for a text label. If a plain `string` is provided, it will be treated as a `formatted` with default/inherited formatting options.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],doc:"Font stack to use for displaying text.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",doc:"Font size.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.35.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",doc:"The maximum line width for text wrapping.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.40.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",doc:"Text leading value for multi-line text.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",doc:"Text tracking amount.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.40.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{left:{doc:"The text is aligned to the left."},center:{doc:"The text is centered."},right:{doc:"The text is aligned to the right."}},default:"center",doc:"Text justification options.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.39.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-anchor":{type:"enum",values:{center:{doc:"The center of the text is placed closest to the anchor."},left:{doc:"The left side of the text is placed closest to the anchor."},right:{doc:"The right side of the text is placed closest to the anchor."},top:{doc:"The top of the text is placed closest to the anchor."},bottom:{doc:"The bottom of the text is placed closest to the anchor."},"top-left":{doc:"The top left corner of the text is placed closest to the anchor."},"top-right":{doc:"The top right corner of the text is placed closest to the anchor."},"bottom-left":{doc:"The bottom left corner of the text is placed closest to the anchor."},"bottom-right":{doc:"The bottom right corner of the text is placed closest to the anchor."}},default:"center",doc:"Part of the text placed closest to the anchor.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.39.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",doc:"Maximum angle change between adjacent characters.",requires:["text-field",{"symbol-placement":["line","line-center"]}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",doc:"Rotates the text clockwise.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.35.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",doc:"Size of the additional area around the text bounding box used for detecting symbol collisions.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,doc:"If true, the text may be flipped vertically to prevent it from being rendered upside-down.",requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{doc:"The text is not altered."},uppercase:{doc:"Forces all letters to be displayed in uppercase."},lowercase:{doc:"Forces all letters to be displayed in lowercase."}},default:"none",doc:"Specifies how to capitalize text, similar to the CSS `text-transform` property.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",doc:"Offset distance of text from its anchor. Positive values indicate right and down, while negative values indicate left and up.",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.35.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,doc:"If true, the text will be visible even if it collides with other previously drawn symbols.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,doc:"If true, other symbols can be visible even if they collide with the text.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,doc:"If true, icons will display without their corresponding text when the text collides with other symbols and the icon does not.",requires:["text-field","icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},"property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},"property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},"property-type":"constant"}},filter:{type:"array",value:"*",doc:"A filter selects specific features from a layer."},filter_operator:{type:"enum",values:{"==":{doc:'`["==", key, value]` equality: `feature[key] = value`'},"!=":{doc:'`["!=", key, value]` inequality: `feature[key] ≠ value`'},">":{doc:'`[">", key, value]` greater than: `feature[key] > value`'},">=":{doc:'`[">=", key, value]` greater than or equal: `feature[key] ≥ value`'},"<":{doc:'`["<", key, value]` less than: `feature[key] < value`'},"<=":{doc:'`["<=", key, value]` less than or equal: `feature[key] ≤ value`'},in:{doc:'`["in", key, v0, ..., vn]` set inclusion: `feature[key] ∈ {v0, ..., vn}`'},"!in":{doc:'`["!in", key, v0, ..., vn]` set exclusion: `feature[key] ∉ {v0, ..., vn}`'},all:{doc:'`["all", f0, ..., fn]` logical `AND`: `f0 ∧ ... ∧ fn`'},any:{doc:'`["any", f0, ..., fn]` logical `OR`: `f0 ∨ ... ∨ fn`'},none:{doc:'`["none", f0, ..., fn]` logical `NOR`: `¬f0 ∧ ... ∧ ¬fn`'},has:{doc:'`["has", key]` `feature[key]` exists'},"!has":{doc:'`["!has", key]` `feature[key]` does not exist'}},doc:"The filter operator."},geometry_type:{type:"enum",values:{Point:{doc:"Filter to point geometries."},LineString:{doc:"Filter to line geometries."},Polygon:{doc:"Filter to polygon geometries."}},doc:"The geometry type for the filter to select."},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2,doc:"Zoom level and value pair."},expression:{type:"array",value:"*",minimum:1,doc:"An expression defines a function that can be used for data-driven style properties or feature filters."},expression_name:{doc:"",type:"enum",values:{let:{doc:'Binds expressions to named variables, which can then be referenced in the result expression using ["var", "variable_name"].',group:"Variable binding","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},var:{doc:'References variable bound using "let".',group:"Variable binding","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},literal:{doc:"Provides a literal array or object value.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},array:{doc:"Asserts that the input is an array (optionally with a specific item type and length). If, when the input expression is evaluated, it is not of the asserted type, then this assertion will cause the whole expression to be aborted.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},at:{doc:"Retrieves an item from an array.",group:"Lookup","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},case:{doc:"Selects the first output whose corresponding test condition evaluates to true.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},match:{doc:'Selects the output whose label value matches the input value, or the fallback value if no match is found. The input can be any expression (e.g. `["get", "building_type"]`). Each label must either be a single literal value or an array of literal values (e.g. `"a"` or `["c", "b"]`), and those values must be all strings or all numbers. (The values `"1"` and `1` cannot both be labels in the same match expression.) If the input type does not match the type of the labels, the result will be the fallback value.',group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},coalesce:{doc:"Evaluates each expression in turn until the first non-null value is obtained, and returns that value.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},step:{doc:'Produces discrete, stepped results by evaluating a piecewise-constant function defined by pairs of input and output values ("stops"). The `input` may be any numeric expression (e.g., `["get", "population"]`). Stop inputs must be numeric literals in strictly ascending order. Returns the output value of the stop just less than the input, or the first input if the input is less than the first stop.',group:"Ramps, scales, curves","sdk-support":{"basic functionality":{js:"0.42.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},interpolate:{doc:'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). The `input` may be any numeric expression (e.g., `["get", "population"]`). Stop inputs must be numeric literals in strictly ascending order. The output type must be `number`, `array<number>`, or `color`.\n\nInterpolation types:\n- `["linear"]`: interpolates linearly between the pair of stops just less than and just greater than the input.\n- `["exponential", base]`: interpolates exponentially between the stops just less than and just greater than the input. `base` controls the rate at which the output increases: higher values make the output increase more towards the high end of the range. With values close to 1 the output increases linearly.\n- `["cubic-bezier", x1, y1, x2, y2]`: interpolates using the cubic bezier curve defined by the given control points.',group:"Ramps, scales, curves","sdk-support":{"basic functionality":{js:"0.42.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"interpolate-hcl":{doc:'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). Works like `interpolate`, but the output type must be `color`, and the interpolation is performed in the Hue-Chroma-Luminance color space.',group:"Ramps, scales, curves","sdk-support":{"basic functionality":{js:"0.49.0"}}},"interpolate-lab":{doc:'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). Works like `interpolate`, but the output type must be `color`, and the interpolation is performed in the CIELAB color space.',group:"Ramps, scales, curves","sdk-support":{"basic functionality":{js:"0.49.0"}}},ln2:{doc:"Returns mathematical constant ln(2).",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},pi:{doc:"Returns the mathematical constant pi.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},e:{doc:"Returns the mathematical constant e.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},typeof:{doc:"Returns a string describing the type of the given value.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},string:{doc:"Asserts that the input value is a string. If multiple values are provided, each one is evaluated in order until a string is obtained. If none of the inputs are strings, the expression is an error.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},number:{doc:"Asserts that the input value is a number. If multiple values are provided, each one is evaluated in order until a number is obtained. If none of the inputs are numbers, the expression is an error.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},boolean:{doc:"Asserts that the input value is a boolean. If multiple values are provided, each one is evaluated in order until a boolean is obtained. If none of the inputs are booleans, the expression is an error.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},object:{doc:"Asserts that the input value is an object. If multiple values are provided, each one is evaluated in order until an object is obtained. If none of the inputs are objects, the expression is an error.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},collator:{doc:"Returns a `collator` for use in locale-dependent comparison operations. The `case-sensitive` and `diacritic-sensitive` options default to `false`. The `locale` argument specifies the IETF language tag of the locale to use. If none is provided, the default locale is used. If the requested locale is not available, the `collator` will use a system-defined fallback locale. Use `resolved-locale` to test the results of locale fallback behavior.",group:"Types","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},format:{doc:"Returns `formatted` text containing annotations for use in mixed-format `text-field` entries. If set, the `text-font` argument overrides the font specified by the root layout properties. If set, the `font-scale` argument specifies a scaling factor relative to the `text-size` specified in the root layout properties.",group:"Types","sdk-support":{"basic functionality":{js:"0.48.0",android:"6.7.0",ios:"4.6.0",macos:"0.12.0"}}},"to-string":{doc:'Converts the input value to a string. If the input is `null`, the result is `""`. If the input is a boolean, the result is `"true"` or `"false"`. If the input is a number, it is converted to a string as specified by the ["NumberToString" algorithm](https://tc39.github.io/ecma262/#sec-tostring-applied-to-the-number-type) of the ECMAScript Language Specification. If the input is a color, it is converted to a string of the form `"rgba(r,g,b,a)"`, where `r`, `g`, and `b` are numerals ranging from 0 to 255, and `a` ranges from 0 to 1. Otherwise, the input is converted to a string in the format specified by the [`JSON.stringify`](https://tc39.github.io/ecma262/#sec-json.stringify) function of the ECMAScript Language Specification.',group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"to-number":{doc:'Converts the input value to a number, if possible. If the input is `null` or `false`, the result is 0. If the input is `true`, the result is 1. If the input is a string, it is converted to a number as specified by the ["ToNumber Applied to the String Type" algorithm](https://tc39.github.io/ecma262/#sec-tonumber-applied-to-the-string-type) of the ECMAScript Language Specification. If multiple values are provided, each one is evaluated in order until the first successful conversion is obtained. If none of the inputs can be converted, the expression is an error.',group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"to-boolean":{doc:"Converts the input value to a boolean. The result is `false` when then input is an empty string, 0, `false`, `null`, or `NaN`; otherwise it is `true`.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"to-rgba":{doc:"Returns a four-element array containing the input color's red, green, blue, and alpha components, in that order.",group:"Color","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"to-color":{doc:"Converts the input value to a color. If multiple values are provided, each one is evaluated in order until the first successful conversion is obtained. If none of the inputs can be converted, the expression is an error.",group:"Types","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},rgb:{doc:"Creates a color value from red, green, and blue components, which must range between 0 and 255, and an alpha component of 1. If any component is out of range, the expression is an error.",group:"Color","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},rgba:{doc:"Creates a color value from red, green, blue components, which must range between 0 and 255, and an alpha component which must range between 0 and 1. If any component is out of range, the expression is an error.",group:"Color","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},get:{doc:"Retrieves a property value from the current feature's properties, or from another object if a second argument is provided. Returns null if the requested property is missing.",group:"Lookup","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},has:{doc:"Tests for the presence of an property value in the current feature's properties, or from another object if a second argument is provided.",group:"Lookup","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},length:{doc:"Gets the length of an array or string.",group:"Lookup","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},properties:{doc:'Gets the feature properties object. Note that in some cases, it may be more efficient to use ["get", "property_name"] directly.',group:"Feature data","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"feature-state":{doc:"Retrieves a property value from the current feature's state. Returns null if the requested property is not present on the feature's state. A feature's state is not part of the GeoJSON or vector tile data, and must be set programmatically on each feature. Note that [\"feature-state\"] can only be used with paint properties that support data-driven styling.",group:"Feature data","sdk-support":{"basic functionality":{js:"0.46.0"}}},"geometry-type":{doc:"Gets the feature's geometry type: Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon.",group:"Feature data","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},id:{doc:"Gets the feature's id, if it has one.",group:"Feature data","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},zoom:{doc:'Gets the current zoom level. Note that in style layout and paint properties, ["zoom"] may only appear as the input to a top-level "step" or "interpolate" expression.',group:"Zoom","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"heatmap-density":{doc:"Gets the kernel density estimation of a pixel in a heatmap layer, which is a relative measure of how many data points are crowded around a particular pixel. Can only be used in the `heatmap-color` property.",group:"Heatmap","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"line-progress":{doc:"Gets the progress along a gradient line. Can only be used in the `line-gradient` property.",group:"Feature data","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.5.0",ios:"4.6.0",macos:"0.12.0"}}},"+":{doc:"Returns the sum of the inputs.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"*":{doc:"Returns the product of the inputs.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"-":{doc:"For two inputs, returns the result of subtracting the second input from the first. For a single input, returns the result of subtracting it from 0.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"/":{doc:"Returns the result of floating point division of the first input by the second.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"%":{doc:"Returns the remainder after integer division of the first input by the second.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"^":{doc:"Returns the result of raising the first input to the power specified by the second.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},sqrt:{doc:"Returns the square root of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.42.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},log10:{doc:"Returns the base-ten logarithm of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},ln:{doc:"Returns the natural logarithm of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},log2:{doc:"Returns the base-two logarithm of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},sin:{doc:"Returns the sine of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},cos:{doc:"Returns the cosine of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},tan:{doc:"Returns the tangent of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},asin:{doc:"Returns the arcsine of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},acos:{doc:"Returns the arccosine of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},atan:{doc:"Returns the arctangent of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},min:{doc:"Returns the minimum value of the inputs.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},max:{doc:"Returns the maximum value of the inputs.",group:"Math","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},round:{doc:'Rounds the input to the nearest integer. Halfway values are rounded away from zero. For example, `["round", -1.5]` evaluates to -2.',group:"Math","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},abs:{doc:"Returns the absolute value of the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},ceil:{doc:"Returns the smallest integer that is greater than or equal to the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},floor:{doc:"Returns the largest integer that is less than or equal to the input.",group:"Math","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"==":{doc:"Returns `true` if the input values are equal, `false` otherwise. The comparison is strictly typed: values of different runtime types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},"!=":{doc:"Returns `true` if the input values are not equal, `false` otherwise. The comparison is strictly typed: values of different runtime types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},">":{doc:"Returns `true` if the first input is strictly greater than the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},"<":{doc:"Returns `true` if the first input is strictly less than the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},">=":{doc:"Returns `true` if the first input is greater than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},"<=":{doc:"Returns `true` if the first input is less than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},collator:{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}},all:{doc:"Returns `true` if all the inputs are `true`, `false` otherwise. The inputs are evaluated in order, and evaluation is short-circuiting: once an input expression evaluates to `false`, the result is `false` and no further input expressions are evaluated.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},any:{doc:"Returns `true` if any of the inputs are `true`, `false` otherwise. The inputs are evaluated in order, and evaluation is short-circuiting: once an input expression evaluates to `true`, the result is `true` and no further input expressions are evaluated.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"!":{doc:"Logical negation. Returns `true` if the input is `false`, and `false` if the input is `true`.",group:"Decision","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"is-supported-script":{doc:"Returns `true` if the input string is expected to render legibly. Returns `false` if the input string contains sections that cannot be rendered without potential loss of meaning (e.g. Indic scripts that require complex text shaping, or right-to-left scripts if the the `mapbox-gl-rtl-text` plugin is not in use in Mapbox GL JS).",group:"String"},upcase:{doc:"Returns the input string converted to uppercase. Follows the Unicode Default Case Conversion algorithm and the locale-insensitive case mappings in the Unicode Character Database.",group:"String","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},downcase:{doc:"Returns the input string converted to lowercase. Follows the Unicode Default Case Conversion algorithm and the locale-insensitive case mappings in the Unicode Character Database.",group:"String","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},concat:{doc:"Returns a `string` consisting of the concatenation of the inputs. Each input is converted to a string as if by `to-string`.",group:"String","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}}},"resolved-locale":{doc:"Returns the IETF language tag of the locale being used by the provided `collator`. This can be used to determine the default system locale, or to determine if a requested locale was successfully loaded.",group:"String","sdk-support":{"basic functionality":{js:"0.45.0",android:"6.5.0",ios:"4.2.0",macos:"0.9.0"}}}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{doc:"The position of the light source is aligned to the rotation of the map."},viewport:{doc:"The position of the light source is aligned to the rotation of the viewport."}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},doc:"Whether extruded geometries are lit relative to the map or viewport.",example:"map","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},doc:"Position of the light source relative to lit (extruded) geometries, in [r radial coordinate, a azimuthal angle, p polar angle] where r indicates the distance from the center of the base of an object to its light, a indicates the position of the light relative to 0° (0° when `light.anchor` is set to `viewport` corresponds to the top of the viewport, or 0° when `light.anchor` is set to `map` corresponds to due north, and degrees proceed clockwise), and p indicates the height of the light (from 0°, directly above, to 180°, directly below).",example:[1.5,90,80],"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0,doc:"Color tint for lighting extruded geometries.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}}},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,doc:"Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as more extreme contrast.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}}}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,doc:"Whether or not the fill should be antialiased.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,doc:"The opacity of the entire fill layer. In contrast to the `fill-color`, this value will also affect the 1px stroke around the fill, if the stroke is used.",transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.21.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",doc:"The color of the filled part of this layer. This color can be specified as `rgba` with an alpha component and the color's opacity will not affect the opacity of the 1px stroke, if it is used.",transition:!0,requires:[{"!":"fill-pattern"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.19.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",doc:"The outline color of the fill. Matches the value of `fill-color` if unspecified.",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.19.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{doc:"The fill is translated relative to the map."},viewport:{doc:"The fill is translated relative to the viewport."}},doc:"Controls the frame of reference for `fill-translate`.",default:"map",requires:["fill-translate"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"string",transition:!0,doc:"Name of image in sprite to use for drawing image fills. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.49.0",android:"6.5.0",macos:"0.11.0",ios:"4.4.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},paint_line:{"line-opacity":{type:"number",doc:"The opacity at which the line will be drawn.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",doc:"The color with which the line will be drawn.",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.23.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{doc:"The line is translated relative to the map."},viewport:{doc:"The line is translated relative to the viewport."}},doc:"Controls the frame of reference for `line-translate`.",default:"map",requires:["line-translate"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",doc:"Stroke thickness.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.39.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,doc:"Draws a line casing outside of a line's actual path. Value indicates the width of the inner gap.",transition:!0,units:"pixels","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,doc:"The line's offset. For linear features, a positive value offsets the line to the right, relative to the direction of the line, and a negative value to the left. For polygon features, a positive value results in an inset, and a negative value results in an outset.",transition:!0,units:"pixels","sdk-support":{"basic functionality":{js:"0.12.1",android:"3.0.0",ios:"3.1.0",macos:"0.1.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"Blur applied to the line, in pixels.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",doc:"Specifies the lengths of the alternating dashes and gaps that form the dash pattern. The lengths are later scaled by the line width. To convert a dash length to pixels, multiply the length by the current line width. Note that GeoJSON sources with `lineMetrics: true` specified won't render dashed lines to the expected scale. Also note that zoom-dependent expressions will be evaluated only at integer zoom levels.",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"string",transition:!0,doc:"Name of image in sprite to use for drawing image lines. For seamless patterns, image width must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.49.0",android:"6.5.0",macos:"0.11.0",ios:"4.4.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",doc:'Defines a gradient with which to color a line feature. Can only be used with GeoJSON sources that specify `"lineMetrics": true`.',transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],"sdk-support":{"basic functionality":{js:"0.45.0",android:"6.5.0",ios:"4.4.0",macos:"0.11.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",doc:"Circle radius.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.18.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",doc:"The fill color of the circle.",transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.18.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,doc:"Amount to blur the circle. 1 blurs the circle such that only the centerpoint is full opacity.",transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.20.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",doc:"The opacity at which the circle will be drawn.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.20.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{doc:"The circle is translated relative to the map."},viewport:{doc:"The circle is translated relative to the viewport."}},doc:"Controls the frame of reference for `circle-translate`.",default:"map",requires:["circle-translate"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{doc:"Circles are scaled according to their apparent distance to the camera."},viewport:{doc:"Circles are not scaled."}},default:"map",doc:"Controls the scaling behavior of the circle when the map is pitched.","sdk-support":{"basic functionality":{js:"0.21.0",android:"4.2.0",ios:"3.4.0",macos:"0.2.1"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{doc:"The circle is aligned to the plane of the map."},viewport:{doc:"The circle is aligned to the plane of the viewport."}},default:"viewport",doc:"Orientation of circle when map is pitched.","sdk-support":{"basic functionality":{js:"0.39.0",android:"5.2.0",ios:"3.7.0",macos:"0.6.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"The width of the circle's stroke. Strokes are placed outside of the `circle-radius`.","sdk-support":{"basic functionality":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",doc:"The stroke color of the circle.",transition:!0,"sdk-support":{"basic functionality":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",doc:"The opacity of the circle's stroke.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"},"data-driven styling":{js:"0.29.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",doc:"Radius of influence of one heatmap point in pixels. Increasing the value makes the heatmap smoother, but less detailed.","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,doc:"A measure of how much an individual point contributes to the heatmap. A value of 10 would be equivalent to having 10 points of weight 1 in the same spot. Especially useful when combined with clustering.","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,doc:"Similar to `heatmap-weight` but controls the intensity of the heatmap globally. Primarily used for adjusting the heatmap based on zoom level.","sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],doc:'Defines the color of each pixel based on its density value in a heatmap. Should be an expression that uses `["heatmap-density"]` as input.',transition:!1,"sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",doc:"The global opacity at which the heatmap layer will be drawn.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.41.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{doc:"The opacity at which the icon will be drawn.",type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,doc:"The color of the icon. This can only be used with sdf icons.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,doc:"The color of the icon's halo. Icon halos can only be used with SDF icons.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"Distance of halo to the icon outline.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"Fade out the halo towards the outside.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"Distance that the icon's anchor is moved from its original placement. Positive values indicate right and down, while negative values indicate left and up.",requires:["icon-image"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{doc:"Icons are translated relative to the map."},viewport:{doc:"Icons are translated relative to the viewport."}},doc:"Controls the frame of reference for `icon-translate`.",default:"map",requires:["icon-image","icon-translate"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",doc:"The opacity at which the text will be drawn.",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",doc:"The color with which the text will be drawn.",default:"#000000",transition:!0,requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,doc:"The color of the text's halo, which helps it stand out from backgrounds.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"Distance of halo to the font outline. Max text halo width is 1/4 of the font-size.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",doc:"The halo's fadeout distance towards the outside.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{js:"0.33.0",android:"5.0.0",ios:"3.5.0",macos:"0.4.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"Distance that the text's anchor is moved from its original placement. Positive values indicate right and down, while negative values indicate left and up.",requires:["text-field"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{doc:"The text is translated relative to the map."},viewport:{doc:"The text is translated relative to the viewport."}},doc:"Controls the frame of reference for `text-translate`.",default:"map",requires:["text-field","text-translate"],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",doc:"The opacity at which the image will be drawn.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",doc:"Rotates hues around the color wheel.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",doc:"Increase or reduce the brightness of the image. The value is the minimum brightness.",default:0,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",doc:"Increase or reduce the brightness of the image. The value is the maximum brightness.",default:1,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",doc:"Increase or reduce the saturation of the image.",default:0,minimum:-1,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",doc:"Increase or reduce the contrast of the image.",default:0,minimum:-1,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",doc:"The resampling/interpolation method to use for overscaling, also known as texture magnification filter",values:{linear:{doc:"(Bi)linear filtering interpolates pixel values using the weighted average of the four closest original source pixels creating a smooth but blurry look when overscaled"},nearest:{doc:"Nearest neighbor filtering interpolates pixel values using the nearest original source pixel creating a sharp but pixelated look when overscaled"}},default:"linear","sdk-support":{"basic functionality":{js:"0.47.0",android:"6.3.0",ios:"4.2.0",macos:"0.9.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",doc:"Fade duration when a new tile is added.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,doc:"The direction of the light source used to generate the hillshading with 0 as the top of the viewport if `hillshade-illumination-anchor` is set to `viewport` and due north if `hillshade-illumination-anchor` is set to `map`.",transition:!1,"sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{doc:"The hillshade illumination is relative to the north direction."},viewport:{doc:"The hillshade illumination is relative to the top of the viewport."}},default:"viewport",doc:"Direction of light source when map is rotated.","sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",doc:"Intensity of the hillshade",default:.5,minimum:0,maximum:1,transition:!0,"sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",doc:"The shading color of areas that face away from the light source.",transition:!0,"sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",doc:"The shading color of areas that faces towards the light source.",transition:!0,"sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",doc:"The shading color used to accentuate rugged terrain like sharp cliffs and gorges.",transition:!0,"sdk-support":{"basic functionality":{js:"0.43.0",android:"6.0.0",ios:"4.0.0",macos:"0.7.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",doc:"The color with which the background will be drawn.",transition:!0,requires:[{"!":"background-pattern"}],"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"string",transition:!0,doc:"Name of image in sprite to use for drawing an image background. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.","sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,doc:"The opacity at which the background will be drawn.",transition:!0,"sdk-support":{"basic functionality":{js:"0.10.0",android:"2.0.1",ios:"2.0.0",macos:"0.1.0"}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds",doc:"Time allotted for transitions to complete."},delay:{type:"number",default:0,minimum:0,units:"milliseconds",doc:"Length of time before a transition begins."}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{doc:"The layer is shown."},none:{doc:"The layer is not shown."}},default:"visible",doc:"Whether this layer is displayed.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},"property-type":"constant"}},function:{expression:{type:"expression",doc:"An expression."},stops:{type:"array",doc:"An array of stops.",value:"function_stop"},base:{type:"number",default:1,minimum:0,doc:"The exponential base of the interpolation curve. It controls the rate at which the result increases. Higher values make the result increase more towards the high end of the range. With `1` the stops are interpolated linearly."},property:{type:"string",doc:"The name of a feature property to use as the function input.",default:"$zoom"},type:{type:"enum",values:{identity:{doc:"Return the input value as the output value."},exponential:{doc:"Generate an output by interpolating between stops just less than and just greater than the function input."},interval:{doc:"Return the output value of the stop just less than the function input."},categorical:{doc:"Return the output value of the stop equal to the function input."}},doc:"The interpolation strategy to use in function evaluation.",default:"exponential"},colorSpace:{type:"enum",values:{rgb:{doc:"Use the RGB color space to interpolate color values"},lab:{doc:"Use the LAB color space to interpolate color values."},hcl:{doc:"Use the HCL color space to interpolate color values, interpolating the Hue, Chroma, and Luminance channels individually."}},doc:"The color space in which colors interpolated. Interpolating colors in perceptual color spaces like LAB and HCL tend to produce color ramps that look more consistent and produce colors that can be differentiated more easily than those interpolated in RGB space.",default:"rgb"},default:{type:"*",required:!1,doc:"A value to serve as a fallback function result when a value isn't otherwise available. It is used in the following circumstances:\n* In categorical functions, when the feature value does not match any of the stop domain values.\n* In property and zoom-and-property functions, when a feature does not contain a value for the specified property.\n* In identity functions, when the feature value is not valid for the style property (for example, if the function is being used for a `circle-color` property but the feature property value is not a string or not a valid color).\n* In interval or exponential property and zoom-and-property functions, when the feature value is not numeric.\nIf no default is provided, the style property's default is used in these circumstances."}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,doc:"The opacity of the entire fill extrusion layer. This is rendered on a per-layer, not per-feature, basis, and data-driven styling is not available.",transition:!0,"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",doc:"The base color of the extruded fill. The extrusion's surfaces will be shaded differently based on this color in combination with the root `light` settings. If this color is specified as `rgba` with an alpha component, the alpha component will be ignored; use `fill-extrusion-opacity` to set layer opacity.",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",doc:"The geometry's offset. Values are [x, y] where negatives indicate left and up (on the flat plane), respectively.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{}},expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{doc:"The fill extrusion is translated relative to the map."},viewport:{doc:"The fill extrusion is translated relative to the viewport."}},doc:"Controls the frame of reference for `fill-extrusion-translate`.",default:"map",requires:["fill-extrusion-translate"],"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"string",transition:!0,doc:"Name of image in sprite to use for drawing images on extruded fills. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.","sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{js:"0.49.0",android:"6.5.0",macos:"0.11.0",ios:"4.4.0"}},expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",doc:"The height with which to extrude this layer.",transition:!0,"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",doc:"The height with which to extrude the base of this layer. Must be less than or equal to `fill-extrusion-height`.",transition:!0,requires:["fill-extrusion-height"],"sdk-support":{"basic functionality":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"},"data-driven styling":{js:"0.27.0",android:"5.1.0",ios:"3.6.0",macos:"0.5.0"}},expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,doc:"Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.",transition:!1,"sdk-support":{"basic functionality":{js:"0.50.0"}},expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},"property-type":{"data-driven":{type:"property-type",doc:"Property is interpolable and can be represented using a property expression."},"cross-faded":{type:"property-type",doc:"Property is non-interpolable; rather, its values will be cross-faded to smoothly transition between integer zooms."},"cross-faded-data-driven":{type:"property-type",doc:"Property is non-interpolable; rather, its values will be cross-faded to smoothly transition between integer zooms. It can be represented using a property expression."},"color-ramp":{type:"property-type",doc:"Property should be specified using a color ramp from which the output color can be sampled based on a property calculation."},"data-constant":{type:"property-type",doc:"Property is interpolable but cannot be represented using a property expression."},constant:{type:"property-type",doc:"Property is constant across all zoom levels and property values."}}};var o=/("(?:[^\\"]|\\.)*")|[:,\][}{]/g;function i(e,t,r){return t in e?e[t]:r}var a=function(e,t){t=t||{};var r=JSON.stringify([1],null,i(t,"indent",2)).slice(2,-3),n=i(t,"margins",!1),a=""===r?1/0:i(t,"maxLength",80);return function e(t,i,s){t&&"function"==typeof t.toJSON&&(t=t.toJSON());var l=JSON.stringify(t);if(void 0===l)return l;var u=a-i.length-s;if(l.length<=u){var p=function(e,t){var r=t?" ":"",n={"{":"{"+r,"[":"["+r,"}":r+"}","]":r+"]",",":", ",":":": "};return e.replace(o,function(e,t){return t?e:n[e]})}(l,n);if(p.length<=u)return p}if("object"==typeof t&&null!==t){var c,d=i+r,h=[],f=function(e,t){return t===e.length-1?0:1};if(Array.isArray(t)){for(var y=0;y<t.length;y++)h.push(e(t[y],d,f(t,y))||"null");c="[]"}else Object.keys(t).forEach(function(r,n,o){var i=JSON.stringify(r)+": ",a=e(t[r],d,i.length+f(o,n));void 0!==a&&h.push(i+a)}),c="{}";if(h.length>0)return[c[0],r+h.join(",\n"+d),c[1]].join("\n"+i)}return l}(e,"",0)};function s(e,t){var r={};for(var n in t)void 0!==e[n]&&(r[n]=e[n]);for(var o in e)void 0===r[o]&&(r[o]=e[o]);return r}var l="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function u(e,t){return e(t={exports:{}},t.exports),t.exports}var p=u(function(e,t){!function(r){var n=t&&!t.nodeType&&t,o=e&&!e.nodeType&&e,i="object"==typeof l&&l;i.global!==i&&i.window!==i&&i.self!==i||(r=i);var a,s,u=2147483647,p=36,c=1,d=26,h=38,f=700,y=72,m=128,v="-",g=/^xn--/,b=/[^\x20-\x7E]/,x=/[\x2E\u3002\uFF0E\uFF61]/g,w={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},k=p-c,j=Math.floor,z=String.fromCharCode;function S(e){throw RangeError(w[e])}function _(e,t){for(var r=e.length,n=[];r--;)n[r]=t(e[r]);return n}function T(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+_((e=e.replace(x,".")).split("."),t).join(".")}function O(e){for(var t,r,n=[],o=0,i=e.length;o<i;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<i?56320==(64512&(r=e.charCodeAt(o++)))?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),o--):n.push(t);return n}function A(e){return _(e,function(e){var t="";return e>65535&&(t+=z((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=z(e)}).join("")}function q(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function C(e,t,r){var n=0;for(e=r?j(e/f):e>>1,e+=j(e/t);e>k*d>>1;n+=p)e=j(e/k);return j(n+(k+1)*e/(e+h))}function E(e){var t,r,n,o,i,a,s,l,h,f,g,b=[],x=e.length,w=0,k=m,z=y;for((r=e.lastIndexOf(v))<0&&(r=0),n=0;n<r;++n)e.charCodeAt(n)>=128&&S("not-basic"),b.push(e.charCodeAt(n));for(o=r>0?r+1:0;o<x;){for(i=w,a=1,s=p;o>=x&&S("invalid-input"),((l=(g=e.charCodeAt(o++))-48<10?g-22:g-65<26?g-65:g-97<26?g-97:p)>=p||l>j((u-w)/a))&&S("overflow"),w+=l*a,!(l<(h=s<=z?c:s>=z+d?d:s-z));s+=p)a>j(u/(f=p-h))&&S("overflow"),a*=f;z=C(w-i,t=b.length+1,0==i),j(w/t)>u-k&&S("overflow"),k+=j(w/t),w%=t,b.splice(w++,0,k)}return A(b)}function I(e){var t,r,n,o,i,a,s,l,h,f,g,b,x,w,k,_=[];for(b=(e=O(e)).length,t=m,r=0,i=y,a=0;a<b;++a)(g=e[a])<128&&_.push(z(g));for(n=o=_.length,o&&_.push(v);n<b;){for(s=u,a=0;a<b;++a)(g=e[a])>=t&&g<s&&(s=g);for(s-t>j((u-r)/(x=n+1))&&S("overflow"),r+=(s-t)*x,t=s,a=0;a<b;++a)if((g=e[a])<t&&++r>u&&S("overflow"),g==t){for(l=r,h=p;!(l<(f=h<=i?c:h>=i+d?d:h-i));h+=p)k=l-f,w=p-f,_.push(z(q(f+k%w,0))),l=j(k/w);_.push(z(q(l,0))),i=C(r,x,n==o),r=0,++n}++r,++t}return _.join("")}if(a={version:"1.3.2",ucs2:{decode:O,encode:A},decode:E,encode:I,toASCII:function(e){return T(e,function(e){return b.test(e)?"xn--"+I(e):e})},toUnicode:function(e){return T(e,function(e){return g.test(e)?E(e.slice(4).toLowerCase()):e})}},n&&o)if(e.exports==n)o.exports=a;else for(s in a)a.hasOwnProperty(s)&&(n[s]=a[s]);else r.punycode=a}(l)}),c={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}};function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var h=function(e,t,r,n){t=t||"&",r=r||"=";var o={};if("string"!=typeof e||0===e.length)return o;var i=/\+/g;e=e.split(t);var a=1e3;n&&"number"==typeof n.maxKeys&&(a=n.maxKeys);var s=e.length;a>0&&s>a&&(s=a);for(var l=0;l<s;++l){var u,p,c,h,f=e[l].replace(i,"%20"),y=f.indexOf(r);y>=0?(u=f.substr(0,y),p=f.substr(y+1)):(u=f,p=""),c=decodeURIComponent(u),h=decodeURIComponent(p),d(o,c)?Array.isArray(o[c])?o[c].push(h):o[c]=[o[c],h]:o[c]=h}return o},f=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},y=function(e,t,r,n){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(n){var o=encodeURIComponent(f(n))+r;return Array.isArray(e[n])?e[n].map(function(e){return o+encodeURIComponent(f(e))}).join(t):o+encodeURIComponent(f(e[n]))}).join(t):n?encodeURIComponent(f(n))+r+encodeURIComponent(f(e)):""},m=u(function(e,t){t.decode=t.parse=h,t.encode=t.stringify=y}),v=(m.decode,m.parse,m.encode,m.stringify,M),g=function(e,t){return M(e,!1,!0).resolve(t)},b=function(e,t){if(!e)return t;return M(e,!1,!0).resolveObject(t)},x=function(e){c.isString(e)&&(e=M(e));if(!(e instanceof k))return k.prototype.format.call(e);return e.format()},w=k;function k(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var j=/^([a-z0-9.+-]+:)/i,z=/:[0-9]*$/,S=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,_=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),T=["'"].concat(_),O=["%","/","?",";","#"].concat(T),A=["/","?","#"],q=/^[+a-z0-9A-Z_-]{0,63}$/,C=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,E={javascript:!0,"javascript:":!0},I={javascript:!0,"javascript:":!0},N={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function M(e,t,r){if(e&&c.isObject(e)&&e instanceof k)return e;var n=new k;return n.parse(e,t,r),n}k.prototype.parse=function(e,t,r){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e.indexOf("?"),o=-1!==n&&n<e.indexOf("#")?"?":"#",i=e.split(o);i[0]=i[0].replace(/\\/g,"/");var a=e=i.join(o);if(a=a.trim(),!r&&1===e.split("#").length){var s=S.exec(a);if(s)return this.path=a,this.href=a,this.pathname=s[1],s[2]?(this.search=s[2],this.query=t?m.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var l=j.exec(a);if(l){var u=(l=l[0]).toLowerCase();this.protocol=u,a=a.substr(l.length)}if(r||l||a.match(/^\/\/[^@\/]+@[^@\/]+/)){var d="//"===a.substr(0,2);!d||l&&I[l]||(a=a.substr(2),this.slashes=!0)}if(!I[l]&&(d||l&&!N[l])){for(var h,f,y=-1,v=0;v<A.length;v++){-1!==(g=a.indexOf(A[v]))&&(-1===y||g<y)&&(y=g)}-1!==(f=-1===y?a.lastIndexOf("@"):a.lastIndexOf("@",y))&&(h=a.slice(0,f),a=a.slice(f+1),this.auth=decodeURIComponent(h)),y=-1;for(v=0;v<O.length;v++){var g;-1!==(g=a.indexOf(O[v]))&&(-1===y||g<y)&&(y=g)}-1===y&&(y=a.length),this.host=a.slice(0,y),a=a.slice(y),this.parseHost(),this.hostname=this.hostname||"";var b="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!b)for(var x=this.hostname.split(/\./),w=(v=0,x.length);v<w;v++){var k=x[v];if(k&&!k.match(q)){for(var z="",_=0,M=k.length;_<M;_++)k.charCodeAt(_)>127?z+="x":z+=k[_];if(!z.match(q)){var R=x.slice(0,v),P=x.slice(v+1),L=k.match(C);L&&(R.push(L[1]),P.unshift(L[2])),P.length&&(a="/"+P.join(".")+a),this.hostname=R.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),b||(this.hostname=p.toASCII(this.hostname));var F=this.port?":"+this.port:"",$=this.hostname||"";this.host=$+F,this.href+=this.host,b&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==a[0]&&(a="/"+a))}if(!E[u])for(v=0,w=T.length;v<w;v++){var U=T[v];if(-1!==a.indexOf(U)){var J=encodeURIComponent(U);J===U&&(J=escape(U)),a=a.split(U).join(J)}}var D=a.indexOf("#");-1!==D&&(this.hash=a.substr(D),a=a.slice(0,D));var G=a.indexOf("?");if(-1!==G?(this.search=a.substr(G),this.query=a.substr(G+1),t&&(this.query=m.parse(this.query)),a=a.slice(0,G)):t&&(this.search="",this.query={}),a&&(this.pathname=a),N[u]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){F=this.pathname||"";var W=this.search||"";this.path=F+W}return this.href=this.format(),this},k.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",o=!1,i="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&c.isObject(this.query)&&Object.keys(this.query).length&&(i=m.stringify(this.query));var a=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||N[t])&&!1!==o?(o="//"+(o||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):o||(o=""),n&&"#"!==n.charAt(0)&&(n="#"+n),a&&"?"!==a.charAt(0)&&(a="?"+a),t+o+(r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(a=a.replace("#","%23"))+n},k.prototype.resolve=function(e){return this.resolveObject(M(e,!1,!0)).format()},k.prototype.resolveObject=function(e){if(c.isString(e)){var t=new k;t.parse(e,!1,!0),e=t}for(var r=new k,n=Object.keys(this),o=0;o<n.length;o++){var i=n[o];r[i]=this[i]}if(r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol){for(var a=Object.keys(e),s=0;s<a.length;s++){var l=a[s];"protocol"!==l&&(r[l]=e[l])}return N[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(e.protocol&&e.protocol!==r.protocol){if(!N[e.protocol]){for(var u=Object.keys(e),p=0;p<u.length;p++){var d=u[p];r[d]=e[d]}return r.href=r.format(),r}if(r.protocol=e.protocol,e.host||I[e.protocol])r.pathname=e.pathname;else{for(var h=(e.pathname||"").split("/");h.length&&!(e.host=h.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==h[0]&&h.unshift(""),h.length<2&&h.unshift(""),r.pathname=h.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var f=r.pathname||"",y=r.search||"";r.path=f+y}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var m=r.pathname&&"/"===r.pathname.charAt(0),v=e.host||e.pathname&&"/"===e.pathname.charAt(0),g=v||m||r.host&&e.pathname,b=g,x=r.pathname&&r.pathname.split("/")||[],w=(h=e.pathname&&e.pathname.split("/")||[],r.protocol&&!N[r.protocol]);if(w&&(r.hostname="",r.port=null,r.host&&(""===x[0]?x[0]=r.host:x.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===h[0]?h[0]=e.host:h.unshift(e.host)),e.host=null),g=g&&(""===h[0]||""===x[0])),v)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,x=h;else if(h.length)x||(x=[]),x.pop(),x=x.concat(h),r.search=e.search,r.query=e.query;else if(!c.isNullOrUndefined(e.search)){if(w)r.hostname=r.host=x.shift(),(T=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=T.shift(),r.host=r.hostname=T.shift());return r.search=e.search,r.query=e.query,c.isNull(r.pathname)&&c.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!x.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var j=x.slice(-1)[0],z=(r.host||e.host||x.length>1)&&("."===j||".."===j)||""===j,S=0,_=x.length;_>=0;_--)"."===(j=x[_])?x.splice(_,1):".."===j?(x.splice(_,1),S++):S&&(x.splice(_,1),S--);if(!g&&!b)for(;S--;S)x.unshift("..");!g||""===x[0]||x[0]&&"/"===x[0].charAt(0)||x.unshift(""),z&&"/"!==x.join("/").substr(-1)&&x.push("");var T,O=""===x[0]||x[0]&&"/"===x[0].charAt(0);w&&(r.hostname=r.host=O?"":x.length?x.shift():"",(T=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@"))&&(r.auth=T.shift(),r.host=r.hostname=T.shift()));return(g=g||r.host&&x.length)&&!O&&x.unshift(""),x.length?r.pathname=x.join("/"):(r.pathname=null,r.path=null),c.isNull(r.pathname)&&c.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},k.prototype.parseHost=function(){var e=this.host,t=z.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var R={parse:v,resolve:g,resolveObject:b,format:x,Url:w};function P(e){for(var t=0;t<n.layout.length;t++)for(var r in n[n.layout[t]])if(r===e)return n[n.layout[t]][r];for(var o=0;o<n.paint.length;o++)for(var i in n[n.paint[o]])if(i===e)return n[n.paint[o]][i];return null}function L(e,t){for(var r in e.sources)t(e.sources[r])}function F(e,t){for(var r=0,n=e.layers;r<n.length;r+=1){t(n[r])}}function $(e,t,r){function n(e,t){var n=e[t];n&&Object.keys(n).forEach(function(o){r({path:[e.id,t,o],key:o,value:n[o],reference:P(o),set:function(e){n[o]=e}})})}F(e,function(e){t.paint&&n(e,"paint"),t.layout&&n(e,"layout")})}function U(e,t){for(var r in e)0===r.indexOf("layout")&&t(e[r],r)}function J(e,t){for(var r in e)0===r.indexOf("paint")&&t(e[r],r)}function D(e,t){return"string"==typeof t&&"@"===t[0]?D(e,e.constants[t]):t}function G(e,t,r){e[r]=e[t],delete e[t]}function W(e){var t,r,n;e.version=8,L(e,function(e){"video"===e.type&&void 0!==e.url&&G(e,"url","urls"),"video"===e.type&&e.coordinates.forEach(function(e){return e.reverse()})}),F(e,function(e){U(e,function(e){void 0!==e["symbol-min-distance"]&&G(e,"symbol-min-distance","symbol-spacing")}),J(e,function(e){void 0!==e["background-image"]&&G(e,"background-image","background-pattern"),void 0!==e["line-image"]&&G(e,"line-image","line-pattern"),void 0!==e["fill-image"]&&G(e,"fill-image","fill-pattern")})}),$(e,{paint:!0,layout:!0},function(t){var r=D(e,t.value);(function(e){return Array.isArray(e.stops)})(r)&&r.stops.forEach(function(t){t[1]=D(e,t[1])}),t.set(r)}),delete e.constants,F(e,function(e){U(e,function(e){delete e["text-max-size"],delete e["icon-max-size"]}),J(e,function(t){t["text-size"]&&(e.layout||(e.layout={}),e.layout["text-size"]=t["text-size"],delete t["text-size"]),t["icon-size"]&&(e.layout||(e.layout={}),e.layout["icon-size"]=t["icon-size"],delete t["icon-size"])})}),e.glyphs&&(e.glyphs=(t=e.glyphs,r=R.parse(t),n=r.pathname.split("/"),"mapbox:"!==r.protocol?t:"fontstack"===r.hostname?"mapbox://fonts/mapbox/{fontstack}/{range}.pbf":"fonts"===r.hostname?"mapbox://fonts/"+n[2]+"/{fontstack}/{range}.pbf":void 0)),F(e,function(e){U(e,function(e){e["text-font"]&&(e["text-font"]=function(e){function t(e){return e.split(",").map(function(e){return e.trim()})}if(Array.isArray(e))return e;if("string"==typeof e)return t(e);if("object"==typeof e)return e.stops.forEach(function(e){e[1]=t(e[1])}),e;throw new Error("unexpected font value")}(e["text-font"]))})});for(var o=0,i=e.layers.length-1;i>=0;i--){if("symbol"!==e.layers[i].type){o=i+1;break}}var a=e.layers.splice(o);return a.reverse(),e.layers=e.layers.concat(a),e}function B(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];for(var n=0,o=t;n<o.length;n+=1){var i=o[n];for(var a in i)e[a]=i[a]}return e}var V=function(e){function t(t,r){e.call(this,r),this.message=r,this.key=t}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(Error),H=function(e,t){void 0===t&&(t=[]),this.parent=e,this.bindings={};for(var r=0,n=t;r<n.length;r+=1){var o=n[r],i=o[0],a=o[1];this.bindings[i]=a}};H.prototype.concat=function(e){return new H(this,e)},H.prototype.get=function(e){if(this.bindings[e])return this.bindings[e];if(this.parent)return this.parent.get(e);throw new Error(e+" not found in scope.")},H.prototype.has=function(e){return!!this.bindings[e]||!!this.parent&&this.parent.has(e)};var Z={kind:"null"},X={kind:"number"},K={kind:"string"},Y={kind:"boolean"},Q={kind:"color"},ee={kind:"object"},te={kind:"value"},re={kind:"collator"},ne={kind:"formatted"};function oe(e,t){return{kind:"array",itemType:e,N:t}}function ie(e){if("array"===e.kind){var t=ie(e.itemType);return"number"==typeof e.N?"array<"+t+", "+e.N+">":"value"===e.itemType.kind?"array":"array<"+t+">"}return e.kind}var ae=[Z,X,K,Y,Q,ne,ee,oe(te)];function se(e,t){if("error"===t.kind)return null;if("array"===e.kind){if("array"===t.kind&&(0===t.N&&"value"===t.itemType.kind||!se(e.itemType,t.itemType))&&("number"!=typeof e.N||e.N===t.N))return null}else{if(e.kind===t.kind)return null;if("value"===e.kind)for(var r=0,n=ae;r<n.length;r+=1){if(!se(n[r],t))return null}}return"Expected "+ie(e)+" but found "+ie(t)+" instead."}var le=u(function(e,t){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(e){return(e=Math.round(e))<0?0:e>255?255:e}function o(e){return e<0?0:e>1?1:e}function i(e){return"%"===e[e.length-1]?n(parseFloat(e)/100*255):n(parseInt(e))}function a(e){return"%"===e[e.length-1]?o(parseFloat(e)/100):o(parseFloat(e))}function s(e,t,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?e+(t-e)*r*6:2*r<1?t:3*r<2?e+(t-e)*(2/3-r)*6:e}try{t.parseCSSColor=function(e){var t,o=e.replace(/ /g,"").toLowerCase();if(o in r)return r[o].slice();if("#"===o[0])return 4===o.length?(t=parseInt(o.substr(1),16))>=0&&t<=4095?[(3840&t)>>4|(3840&t)>>8,240&t|(240&t)>>4,15&t|(15&t)<<4,1]:null:7===o.length&&(t=parseInt(o.substr(1),16))>=0&&t<=16777215?[(16711680&t)>>16,(65280&t)>>8,255&t,1]:null;var l=o.indexOf("("),u=o.indexOf(")");if(-1!==l&&u+1===o.length){var p=o.substr(0,l),c=o.substr(l+1,u-(l+1)).split(","),d=1;switch(p){case"rgba":if(4!==c.length)return null;d=a(c.pop());case"rgb":return 3!==c.length?null:[i(c[0]),i(c[1]),i(c[2]),d];case"hsla":if(4!==c.length)return null;d=a(c.pop());case"hsl":if(3!==c.length)return null;var h=(parseFloat(c[0])%360+360)%360/360,f=a(c[1]),y=a(c[2]),m=y<=.5?y*(f+1):y+f-y*f,v=2*y-m;return[n(255*s(v,m,h+1/3)),n(255*s(v,m,h)),n(255*s(v,m,h-1/3)),d];default:return null}}return null}}catch(l){}}).parseCSSColor,ue=function(e,t,r,n){void 0===n&&(n=1),this.r=e,this.g=t,this.b=r,this.a=n};ue.parse=function(e){if(e){if(e instanceof ue)return e;if("string"==typeof e){var t=le(e);if(t)return new ue(t[0]/255*t[3],t[1]/255*t[3],t[2]/255*t[3],t[3])}}},ue.prototype.toString=function(){var e=this.toArray(),t=e[0],r=e[1],n=e[2],o=e[3];return"rgba("+Math.round(t)+","+Math.round(r)+","+Math.round(n)+","+o+")"},ue.prototype.toArray=function(){var e=this.r,t=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*e/n,255*t/n,255*r/n,n]},ue.black=new ue(0,0,0,1),ue.white=new ue(1,1,1,1),ue.transparent=new ue(0,0,0,0),ue.red=new ue(1,0,0,1);var pe=function(e,t,r){this.sensitivity=e?t?"variant":"case":t?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};pe.prototype.compare=function(e,t){return this.collator.compare(e,t)},pe.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var ce=function(e,t,r){this.text=e,this.scale=t,this.fontStack=r},de=function(e){this.sections=e};function he(e,t,r,n){return"number"==typeof e&&e>=0&&e<=255&&"number"==typeof t&&t>=0&&t<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===n||"number"==typeof n&&n>=0&&n<=1?null:"Invalid rgba value ["+[e,t,r,n].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof n?[e,t,r,n]:[e,t,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function fe(e){if(null===e)return Z;if("string"==typeof e)return K;if("boolean"==typeof e)return Y;if("number"==typeof e)return X;if(e instanceof ue)return Q;if(e instanceof pe)return re;if(e instanceof de)return ne;if(Array.isArray(e)){for(var t,r=e.length,n=0,o=e;n<o.length;n+=1){var i=fe(o[n]);if(t){if(t===i)continue;t=te;break}t=i}return oe(t||te,r)}return ee}function ye(e){var t=typeof e;return null===e?"":"string"===t||"number"===t||"boolean"===t?String(e):e instanceof ue||e instanceof de?e.toString():JSON.stringify(e)}de.fromString=function(e){return new de([new ce(e,null,null)])},de.prototype.toString=function(){return this.sections.map(function(e){return e.text}).join("")},de.prototype.serialize=function(){for(var e=["format"],t=0,r=this.sections;t<r.length;t+=1){var n=r[t];e.push(n.text);var o={};n.fontStack&&(o["text-font"]=["literal",n.fontStack.split(",")]),n.scale&&(o["font-scale"]=n.scale),e.push(o)}return e};var me=function(e,t){this.type=e,this.value=t};me.parse=function(e,t){if(2!==e.length)return t.error("'literal' expression requires exactly one argument, but found "+(e.length-1)+" instead.");if(!function e(t){if(null===t)return!0;if("string"==typeof t)return!0;if("boolean"==typeof t)return!0;if("number"==typeof t)return!0;if(t instanceof ue)return!0;if(t instanceof pe)return!0;if(t instanceof de)return!0;if(Array.isArray(t)){for(var r=0,n=t;r<n.length;r+=1)if(!e(n[r]))return!1;return!0}if("object"==typeof t){for(var o in t)if(!e(t[o]))return!1;return!0}return!1}(e[1]))return t.error("invalid value");var r=e[1],n=fe(r),o=t.expectedType;return"array"!==n.kind||0!==n.N||!o||"array"!==o.kind||"number"==typeof o.N&&0!==o.N||(n=o),new me(n,r)},me.prototype.evaluate=function(){return this.value},me.prototype.eachChild=function(){},me.prototype.possibleOutputs=function(){return[this.value]},me.prototype.serialize=function(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof ue?["rgba"].concat(this.value.toArray()):this.value instanceof de?this.value.serialize():this.value};var ve=function(e){this.name="ExpressionEvaluationError",this.message=e};ve.prototype.toJSON=function(){return this.message};var ge={string:K,number:X,boolean:Y,object:ee},be=function(e,t){this.type=e,this.args=t};be.parse=function(e,t){if(e.length<2)return t.error("Expected at least one argument.");var r,n=1,o=e[0];if("array"===o){var i,a;if(e.length>2){var s=e[1];if("string"!=typeof s||!(s in ge)||"object"===s)return t.error('The item type argument of "array" must be one of string, number, boolean',1);i=ge[s],n++}else i=te;if(e.length>3){if(null!==e[2]&&("number"!=typeof e[2]||e[2]<0||e[2]!==Math.floor(e[2])))return t.error('The length argument to "array" must be a positive integer literal',2);a=e[2],n++}r=oe(i,a)}else r=ge[o];for(var l=[];n<e.length;n++){var u=t.parse(e[n],n,te);if(!u)return null;l.push(u)}return new be(r,l)},be.prototype.evaluate=function(e){for(var t=0;t<this.args.length;t++){var r=this.args[t].evaluate(e);if(!se(this.type,fe(r)))return r;if(t===this.args.length-1)throw new ve("Expected value to be of type "+ie(this.type)+", but found "+ie(fe(r))+" instead.")}return null},be.prototype.eachChild=function(e){this.args.forEach(e)},be.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.args.map(function(e){return e.possibleOutputs()}));var e},be.prototype.serialize=function(){var e=this.type,t=[e.kind];if("array"===e.kind){var r=e.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){t.push(r.kind);var n=e.N;("number"==typeof n||this.args.length>1)&&t.push(n)}}return t.concat(this.args.map(function(e){return e.serialize()}))};var xe=function(e){this.type=ne,this.sections=e};xe.parse=function(e,t){if(e.length<3)return t.error("Expected at least two arguments.");if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");for(var r=[],n=1;n<e.length-1;n+=2){var o=t.parse(e[n],1,te);if(!o)return null;var i=o.type.kind;if("string"!==i&&"value"!==i&&"null"!==i)return t.error("Formatted text type must be 'string', 'value', or 'null'.");var a=e[n+1];if("object"!=typeof a||Array.isArray(a))return t.error("Format options argument must be an object.");var s=null;if(a["font-scale"]&&!(s=t.parse(a["font-scale"],1,X)))return null;var l=null;if(a["text-font"]&&!(l=t.parse(a["text-font"],1,oe(K))))return null;r.push({text:o,scale:s,font:l})}return new xe(r)},xe.prototype.evaluate=function(e){return new de(this.sections.map(function(t){return new ce(ye(t.text.evaluate(e)),t.scale?t.scale.evaluate(e):null,t.font?t.font.evaluate(e).join(","):null)}))},xe.prototype.eachChild=function(e){for(var t=0,r=this.sections;t<r.length;t+=1){var n=r[t];e(n.text),n.scale&&e(n.scale),n.font&&e(n.font)}},xe.prototype.possibleOutputs=function(){return[void 0]},xe.prototype.serialize=function(){for(var e=["format"],t=0,r=this.sections;t<r.length;t+=1){var n=r[t];e.push(n.text.serialize());var o={};n.scale&&(o["font-scale"]=n.scale.serialize()),n.font&&(o["text-font"]=n.font.serialize()),e.push(o)}return e};var we={"to-boolean":Y,"to-color":Q,"to-number":X,"to-string":K},ke=function(e,t){this.type=e,this.args=t};ke.parse=function(e,t){if(e.length<2)return t.error("Expected at least one argument.");var r=e[0];if(("to-boolean"===r||"to-string"===r)&&2!==e.length)return t.error("Expected one argument.");for(var n=we[r],o=[],i=1;i<e.length;i++){var a=t.parse(e[i],i,te);if(!a)return null;o.push(a)}return new ke(n,o)},ke.prototype.evaluate=function(e){if("boolean"===this.type.kind)return Boolean(this.args[0].evaluate(e));if("color"===this.type.kind){for(var t,r,n=0,o=this.args;n<o.length;n+=1){if(r=null,(t=o[n].evaluate(e))instanceof ue)return t;if("string"==typeof t){var i=e.parseColor(t);if(i)return i}else if(Array.isArray(t)&&!(r=t.length<3||t.length>4?"Invalid rbga value "+JSON.stringify(t)+": expected an array containing either three or four numeric values.":he(t[0],t[1],t[2],t[3])))return new ue(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new ve(r||"Could not parse color from value '"+("string"==typeof t?t:JSON.stringify(t))+"'")}if("number"===this.type.kind){for(var a=null,s=0,l=this.args;s<l.length;s+=1){if(null===(a=l[s].evaluate(e)))return 0;var u=Number(a);if(!isNaN(u))return u}throw new ve("Could not convert "+JSON.stringify(a)+" to number.")}return"formatted"===this.type.kind?de.fromString(ye(this.args[0].evaluate(e))):ye(this.args[0].evaluate(e))},ke.prototype.eachChild=function(e){this.args.forEach(e)},ke.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.args.map(function(e){return e.possibleOutputs()}));var e},ke.prototype.serialize=function(){if("formatted"===this.type.kind)return new xe([{text:this.args[0],scale:null,font:null}]).serialize();var e=["to-"+this.type.kind];return this.eachChild(function(t){e.push(t.serialize())}),e};var je=["Unknown","Point","LineString","Polygon"],ze=function(){this.globals=null,this.feature=null,this.featureState=null,this._parseColorCache={}};ze.prototype.id=function(){return this.feature&&"id"in this.feature?this.feature.id:null},ze.prototype.geometryType=function(){return this.feature?"number"==typeof this.feature.type?je[this.feature.type]:this.feature.type:null},ze.prototype.properties=function(){return this.feature&&this.feature.properties||{}},ze.prototype.parseColor=function(e){var t=this._parseColorCache[e];return t||(t=this._parseColorCache[e]=ue.parse(e)),t};var Se=function(e,t,r,n){this.name=e,this.type=t,this._evaluate=r,this.args=n};Se.prototype.evaluate=function(e){return this._evaluate(e,this.args)},Se.prototype.eachChild=function(e){this.args.forEach(e)},Se.prototype.possibleOutputs=function(){return[void 0]},Se.prototype.serialize=function(){return[this.name].concat(this.args.map(function(e){return e.serialize()}))},Se.parse=function(e,t){var r=e[0],n=Se.definitions[r];if(!n)return t.error('Unknown expression "'+r+'". If you wanted a literal array, use ["literal", [...]].',0);for(var o,i=Array.isArray(n)?n[0]:n.type,a=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,s=a.filter(function(t){var r=t[0];return!Array.isArray(r)||r.length===e.length-1}),l=null,u=0,p=s;u<p.length;u+=1){var c=p[u],d=c[0],h=c[1];l=new Ce(t.registry,t.path,null,t.scope);for(var f=[],y=!1,m=1;m<e.length;m++){var v=e[m],g=Array.isArray(d)?d[m-1]:d.type,b=l.parse(v,1+f.length,g);if(!b){y=!0;break}f.push(b)}if(!y)if(Array.isArray(d)&&d.length!==f.length)l.error("Expected "+d.length+" arguments, but found "+f.length+" instead.");else{for(var x=0;x<f.length;x++){var w=Array.isArray(d)?d[x]:d.type,k=f[x];l.concat(x+1).checkSubtype(w,k.type)}if(0===l.errors.length)return new Se(r,i,h,f)}}if(1===s.length)(o=t.errors).push.apply(o,l.errors);else{for(var j=(s.length?s:a).map(function(e){var t,r=e[0];return t=r,Array.isArray(t)?"("+t.map(ie).join(", ")+")":"("+ie(t.type)+"...)"}).join(" | "),z=[],S=1;S<e.length;S++){var _=t.parse(e[S],1+z.length);if(!_)return null;z.push(ie(_.type))}t.error("Expected arguments of type "+j+", but found ("+z.join(", ")+") instead.")}return null},Se.register=function(e,t){for(var r in Se.definitions=t,t)e[r]=Se};var _e=function(e,t,r){this.type=re,this.locale=r,this.caseSensitive=e,this.diacriticSensitive=t};function Te(e){if(e instanceof Se){if("get"===e.name&&1===e.args.length)return!1;if("feature-state"===e.name)return!1;if("has"===e.name&&1===e.args.length)return!1;if("properties"===e.name||"geometry-type"===e.name||"id"===e.name)return!1;if(/^filter-/.test(e.name))return!1}var t=!0;return e.eachChild(function(e){t&&!Te(e)&&(t=!1)}),t}function Oe(e){if(e instanceof Se&&"feature-state"===e.name)return!1;var t=!0;return e.eachChild(function(e){t&&!Oe(e)&&(t=!1)}),t}function Ae(e,t){if(e instanceof Se&&t.indexOf(e.name)>=0)return!1;var r=!0;return e.eachChild(function(e){r&&!Ae(e,t)&&(r=!1)}),r}_e.parse=function(e,t){if(2!==e.length)return t.error("Expected one argument.");var r=e[1];if("object"!=typeof r||Array.isArray(r))return t.error("Collator options argument must be an object.");var n=t.parse(void 0!==r["case-sensitive"]&&r["case-sensitive"],1,Y);if(!n)return null;var o=t.parse(void 0!==r["diacritic-sensitive"]&&r["diacritic-sensitive"],1,Y);if(!o)return null;var i=null;return r.locale&&!(i=t.parse(r.locale,1,K))?null:new _e(n,o,i)},_e.prototype.evaluate=function(e){return new pe(this.caseSensitive.evaluate(e),this.diacriticSensitive.evaluate(e),this.locale?this.locale.evaluate(e):null)},_e.prototype.eachChild=function(e){e(this.caseSensitive),e(this.diacriticSensitive),this.locale&&e(this.locale)},_e.prototype.possibleOutputs=function(){return[void 0]},_e.prototype.serialize=function(){var e={};return e["case-sensitive"]=this.caseSensitive.serialize(),e["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(e.locale=this.locale.serialize()),["collator",e]};var qe=function(e,t){this.type=t.type,this.name=e,this.boundExpression=t};qe.parse=function(e,t){if(2!==e.length||"string"!=typeof e[1])return t.error("'var' expression requires exactly one string literal argument.");var r=e[1];return t.scope.has(r)?new qe(r,t.scope.get(r)):t.error('Unknown variable "'+r+'". Make sure "'+r+'" has been bound in an enclosing "let" expression before using it.',1)},qe.prototype.evaluate=function(e){return this.boundExpression.evaluate(e)},qe.prototype.eachChild=function(){},qe.prototype.possibleOutputs=function(){return[void 0]},qe.prototype.serialize=function(){return["var",this.name]};var Ce=function(e,t,r,n,o){void 0===t&&(t=[]),void 0===n&&(n=new H),void 0===o&&(o=[]),this.registry=e,this.path=t,this.key=t.map(function(e){return"["+e+"]"}).join(""),this.scope=n,this.errors=o,this.expectedType=r};function Ee(e,t){for(var r,n,o=0,i=e.length-1,a=0;o<=i;){if(r=e[a=Math.floor((o+i)/2)],n=e[a+1],t===r||t>r&&t<n)return a;if(r<t)o=a+1;else{if(!(r>t))throw new ve("Input is not a number.");i=a-1}}return Math.max(a-1,0)}Ce.prototype.parse=function(e,t,r,n,o){return void 0===o&&(o={}),t?this.concat(t,r,n)._parse(e,o):this._parse(e,o)},Ce.prototype._parse=function(e,t){function r(e,t,r){return"assert"===r?new be(t,[e]):"coerce"===r?new ke(t,[e]):e}if(null!==e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e||(e=["literal",e]),Array.isArray(e)){if(0===e.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var n=e[0];if("string"!=typeof n)return this.error("Expression name must be a string, but found "+typeof n+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var o=this.registry[n];if(o){var i=o.parse(e,this);if(!i)return null;if(this.expectedType){var a=this.expectedType,s=i.type;if("string"!==a.kind&&"number"!==a.kind&&"boolean"!==a.kind&&"object"!==a.kind&&"array"!==a.kind||"value"!==s.kind)if("color"!==a.kind&&"formatted"!==a.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(a,s))return null}else i=r(i,a,t.typeAnnotation||"coerce");else i=r(i,a,t.typeAnnotation||"assert")}if(!(i instanceof me)&&function e(t){if(t instanceof qe)return e(t.boundExpression);if(t instanceof Se&&"error"===t.name)return!1;if(t instanceof _e)return!1;var r=t instanceof ke||t instanceof be;var n=!0;t.eachChild(function(t){n=r?n&&e(t):n&&t instanceof me});if(!n)return!1;return Te(t)&&Ae(t,["zoom","heatmap-density","line-progress","is-supported-script"])}(i)){var l=new ze;try{i=new me(i.type,i.evaluate(l))}catch(u){return this.error(u.message),null}}return i}return this.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===e?this.error("'undefined' value invalid. Use null instead."):"object"==typeof e?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof e+" instead.")},Ce.prototype.concat=function(e,t,r){var n="number"==typeof e?this.path.concat(e):this.path,o=r?this.scope.concat(r):this.scope;return new Ce(this.registry,n,t||null,o,this.errors)},Ce.prototype.error=function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];var n=""+this.key+t.map(function(e){return"["+e+"]"}).join("");this.errors.push(new V(n,e))},Ce.prototype.checkSubtype=function(e,t){var r=se(e,t);return r&&this.error(r),r};var Ie=function(e,t,r){this.type=e,this.input=t,this.labels=[],this.outputs=[];for(var n=0,o=r;n<o.length;n+=1){var i=o[n],a=i[0],s=i[1];this.labels.push(a),this.outputs.push(s)}};Ie.parse=function(e,t){var r=e[1],n=e.slice(2);if(e.length-1<4)return t.error("Expected at least 4 arguments, but found only "+(e.length-1)+".");if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(!(r=t.parse(r,1,X)))return null;var o=[],i=null;t.expectedType&&"value"!==t.expectedType.kind&&(i=t.expectedType),n.unshift(-1/0);for(var a=0;a<n.length;a+=2){var s=n[a],l=n[a+1],u=a+1,p=a+2;if("number"!=typeof s)return t.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',u);if(o.length&&o[o.length-1][0]>=s)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',u);var c=t.parse(l,p,i);if(!c)return null;i=i||c.type,o.push([s,c])}return new Ie(i,r,o)},Ie.prototype.evaluate=function(e){var t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);var n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);var o=t.length;return n>=t[o-1]?r[o-1].evaluate(e):r[Ee(t,n)].evaluate(e)},Ie.prototype.eachChild=function(e){e(this.input);for(var t=0,r=this.outputs;t<r.length;t+=1){e(r[t])}},Ie.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.outputs.map(function(e){return e.possibleOutputs()}));var e},Ie.prototype.serialize=function(){for(var e=["step",this.input.serialize()],t=0;t<this.labels.length;t++)t>0&&e.push(this.labels[t]),e.push(this.outputs[t].serialize());return e};var Ne=Me;function Me(e,t,r,n){this.cx=3*e,this.bx=3*(r-e)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*t,this.by=3*(n-t)-this.cy,this.ay=1-this.cy-this.by,this.p1x=e,this.p1y=n,this.p2x=r,this.p2y=n}function Re(e,t,r){return e*(1-r)+t*r}Me.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e},Me.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e},Me.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx},Me.prototype.solveCurveX=function(e,t){var r,n,o,i,a;for(void 0===t&&(t=1e-6),o=e,a=0;a<8;a++){if(i=this.sampleCurveX(o)-e,Math.abs(i)<t)return o;var s=this.sampleCurveDerivativeX(o);if(Math.abs(s)<1e-6)break;o-=i/s}if((o=e)<(r=0))return r;if(o>(n=1))return n;for(;r<n;){if(i=this.sampleCurveX(o),Math.abs(i-e)<t)return o;e>i?r=o:n=o,o=.5*(n-r)+r}return o},Me.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))};var Pe=Object.freeze({number:Re,color:function(e,t,r){return new ue(Re(e.r,t.r,r),Re(e.g,t.g,r),Re(e.b,t.b,r),Re(e.a,t.a,r))},array:function(e,t,r){return e.map(function(e,n){return Re(e,t[n],r)})}}),Le=.95047,Fe=1,$e=1.08883,Ue=4/29,Je=6/29,De=3*Je*Je,Ge=Je*Je*Je,We=Math.PI/180,Be=180/Math.PI;function Ve(e){return e>Ge?Math.pow(e,1/3):e/De+Ue}function He(e){return e>Je?e*e*e:De*(e-Ue)}function Ze(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function Xe(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Ke(e){var t=Xe(e.r),r=Xe(e.g),n=Xe(e.b),o=Ve((.4124564*t+.3575761*r+.1804375*n)/Le),i=Ve((.2126729*t+.7151522*r+.072175*n)/Fe);return{l:116*i-16,a:500*(o-i),b:200*(i-Ve((.0193339*t+.119192*r+.9503041*n)/$e)),alpha:e.a}}function Ye(e){var t=(e.l+16)/116,r=isNaN(e.a)?t:t+e.a/500,n=isNaN(e.b)?t:t-e.b/200;return t=Fe*He(t),r=Le*He(r),n=$e*He(n),new ue(Ze(3.2404542*r-1.5371385*t-.4985314*n),Ze(-.969266*r+1.8760108*t+.041556*n),Ze(.0556434*r-.2040259*t+1.0572252*n),e.alpha)}function Qe(e,t,r){var n=t-e;return e+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var et={forward:Ke,reverse:Ye,interpolate:function(e,t,r){return{l:Re(e.l,t.l,r),a:Re(e.a,t.a,r),b:Re(e.b,t.b,r),alpha:Re(e.alpha,t.alpha,r)}}},tt={forward:function(e){var t=Ke(e),r=t.l,n=t.a,o=t.b,i=Math.atan2(o,n)*Be;return{h:i<0?i+360:i,c:Math.sqrt(n*n+o*o),l:r,alpha:e.a}},reverse:function(e){var t=e.h*We,r=e.c;return Ye({l:e.l,a:Math.cos(t)*r,b:Math.sin(t)*r,alpha:e.alpha})},interpolate:function(e,t,r){return{h:Qe(e.h,t.h,r),c:Re(e.c,t.c,r),l:Re(e.l,t.l,r),alpha:Re(e.alpha,t.alpha,r)}}},rt=Object.freeze({lab:et,hcl:tt}),nt=function(e,t,r,n,o){this.type=e,this.operator=t,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var i=0,a=o;i<a.length;i+=1){var s=a[i],l=s[0],u=s[1];this.labels.push(l),this.outputs.push(u)}};function ot(e,t,r,n){var o=n-r,i=e-r;return 0===o?0:1===t?i/o:(Math.pow(t,i)-1)/(Math.pow(t,o)-1)}nt.interpolationFactor=function(e,t,r,n){var o=0;if("exponential"===e.name)o=ot(t,e.base,r,n);else if("linear"===e.name)o=ot(t,1,r,n);else if("cubic-bezier"===e.name){var i=e.controlPoints;o=new Ne(i[0],i[1],i[2],i[3]).solve(ot(t,1,r,n))}return o},nt.parse=function(e,t){var r=e[0],n=e[1],o=e[2],i=e.slice(3);if(!Array.isArray(n)||0===n.length)return t.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){var a=n[1];if("number"!=typeof a)return t.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:a}}else{if("cubic-bezier"!==n[0])return t.error("Unknown interpolation type "+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some(function(e){return"number"!=typeof e||e<0||e>1}))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:s}}if(e.length-1<4)return t.error("Expected at least 4 arguments, but found only "+(e.length-1)+".");if((e.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(!(o=t.parse(o,2,X)))return null;var l=[],u=null;"interpolate-hcl"===r||"interpolate-lab"===r?u=Q:t.expectedType&&"value"!==t.expectedType.kind&&(u=t.expectedType);for(var p=0;p<i.length;p+=2){var c=i[p],d=i[p+1],h=p+3,f=p+4;if("number"!=typeof c)return t.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',h);if(l.length&&l[l.length-1][0]>=c)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',h);var y=t.parse(d,f,u);if(!y)return null;u=u||y.type,l.push([c,y])}return"number"===u.kind||"color"===u.kind||"array"===u.kind&&"number"===u.itemType.kind&&"number"==typeof u.N?new nt(u,r,n,o,l):t.error("Type "+ie(u)+" is not interpolatable.")},nt.prototype.evaluate=function(e){var t=this.labels,r=this.outputs;if(1===t.length)return r[0].evaluate(e);var n=this.input.evaluate(e);if(n<=t[0])return r[0].evaluate(e);var o=t.length;if(n>=t[o-1])return r[o-1].evaluate(e);var i=Ee(t,n),a=t[i],s=t[i+1],l=nt.interpolationFactor(this.interpolation,n,a,s),u=r[i].evaluate(e),p=r[i+1].evaluate(e);return"interpolate"===this.operator?Pe[this.type.kind.toLowerCase()](u,p,l):"interpolate-hcl"===this.operator?tt.reverse(tt.interpolate(tt.forward(u),tt.forward(p),l)):et.reverse(et.interpolate(et.forward(u),et.forward(p),l))},nt.prototype.eachChild=function(e){e(this.input);for(var t=0,r=this.outputs;t<r.length;t+=1){e(r[t])}},nt.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.outputs.map(function(e){return e.possibleOutputs()}));var e},nt.prototype.serialize=function(){var e;e="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);for(var t=[this.operator,e,this.input.serialize()],r=0;r<this.labels.length;r++)t.push(this.labels[r],this.outputs[r].serialize());return t};var it=function(e,t){this.type=e,this.args=t};it.parse=function(e,t){if(e.length<2)return t.error("Expectected at least one argument.");var r=null,n=t.expectedType;n&&"value"!==n.kind&&(r=n);for(var o=[],i=0,a=e.slice(1);i<a.length;i+=1){var s=a[i],l=t.parse(s,1+o.length,r,void 0,{typeAnnotation:"omit"});if(!l)return null;r=r||l.type,o.push(l)}var u=n&&o.some(function(e){return se(n,e.type)});return new it(u?te:r,o)},it.prototype.evaluate=function(e){for(var t=null,r=0,n=this.args;r<n.length;r+=1){if(null!==(t=n[r].evaluate(e)))break}return t},it.prototype.eachChild=function(e){this.args.forEach(e)},it.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.args.map(function(e){return e.possibleOutputs()}));var e},it.prototype.serialize=function(){var e=["coalesce"];return this.eachChild(function(t){e.push(t.serialize())}),e};var at=function(e,t){this.type=t.type,this.bindings=[].concat(e),this.result=t};at.prototype.evaluate=function(e){return this.result.evaluate(e)},at.prototype.eachChild=function(e){for(var t=0,r=this.bindings;t<r.length;t+=1){e(r[t][1])}e(this.result)},at.parse=function(e,t){if(e.length<4)return t.error("Expected at least 3 arguments, but found "+(e.length-1)+" instead.");for(var r=[],n=1;n<e.length-1;n+=2){var o=e[n];if("string"!=typeof o)return t.error("Expected string, but found "+typeof o+" instead.",n);if(/[^a-zA-Z0-9_]/.test(o))return t.error("Variable names must contain only alphanumeric characters or '_'.",n);var i=t.parse(e[n+1],n+1);if(!i)return null;r.push([o,i])}var a=t.parse(e[e.length-1],e.length-1,t.expectedType,r);return a?new at(r,a):null},at.prototype.possibleOutputs=function(){return this.result.possibleOutputs()},at.prototype.serialize=function(){for(var e=["let"],t=0,r=this.bindings;t<r.length;t+=1){var n=r[t],o=n[0],i=n[1];e.push(o,i.serialize())}return e.push(this.result.serialize()),e};var st=function(e,t,r){this.type=e,this.index=t,this.input=r};st.parse=function(e,t){if(3!==e.length)return t.error("Expected 2 arguments, but found "+(e.length-1)+" instead.");var r=t.parse(e[1],1,X),n=t.parse(e[2],2,oe(t.expectedType||te));if(!r||!n)return null;var o=n.type;return new st(o.itemType,r,n)},st.prototype.evaluate=function(e){var t=this.index.evaluate(e),r=this.input.evaluate(e);if(t<0)throw new ve("Array index out of bounds: "+t+" < 0.");if(t>=r.length)throw new ve("Array index out of bounds: "+t+" > "+(r.length-1)+".");if(t!==Math.floor(t))throw new ve("Array index must be an integer, but found "+t+" instead.");return r[t]},st.prototype.eachChild=function(e){e(this.index),e(this.input)},st.prototype.possibleOutputs=function(){return[void 0]},st.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var lt=function(e,t,r,n,o,i){this.inputType=e,this.type=t,this.input=r,this.cases=n,this.outputs=o,this.otherwise=i};lt.parse=function(e,t){if(e.length<5)return t.error("Expected at least 4 arguments, but found only "+(e.length-1)+".");if(e.length%2!=1)return t.error("Expected an even number of arguments.");var r,n;t.expectedType&&"value"!==t.expectedType.kind&&(n=t.expectedType);for(var o={},i=[],a=2;a<e.length-1;a+=2){var s=e[a],l=e[a+1];Array.isArray(s)||(s=[s]);var u=t.concat(a);if(0===s.length)return u.error("Expected at least one branch label.");for(var p=0,c=s;p<c.length;p+=1){var d=c[p];if("number"!=typeof d&&"string"!=typeof d)return u.error("Branch labels must be numbers or strings.");if("number"==typeof d&&Math.abs(d)>Number.MAX_SAFE_INTEGER)return u.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof d&&Math.floor(d)!==d)return u.error("Numeric branch labels must be integer values.");if(r){if(u.checkSubtype(r,fe(d)))return null}else r=fe(d);if(void 0!==o[String(d)])return u.error("Branch labels must be unique.");o[String(d)]=i.length}var h=t.parse(l,a,n);if(!h)return null;n=n||h.type,i.push(h)}var f=t.parse(e[1],1,te);if(!f)return null;var y=t.parse(e[e.length-1],e.length-1,n);return y?"value"!==f.type.kind&&t.concat(1).checkSubtype(r,f.type)?null:new lt(r,n,f,o,i,y):null},lt.prototype.evaluate=function(e){var t=this.input.evaluate(e);return(fe(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(e)},lt.prototype.eachChild=function(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)},lt.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.outputs.map(function(e){return e.possibleOutputs()})).concat(this.otherwise.possibleOutputs());var e},lt.prototype.serialize=function(){for(var e=this,t=["match",this.input.serialize()],r=[],n={},o=0,i=Object.keys(this.cases).sort();o<i.length;o+=1){var a=i[o],s=n[e.cases[a]];void 0===s?(n[e.cases[a]]=r.length,r.push([e.cases[a],[a]])):r[s][1].push(a)}for(var l=function(t){return"number"===e.inputType.kind?Number(t):t},u=0,p=r;u<p.length;u+=1){var c=p[u],d=c[0],h=c[1];1===h.length?t.push(l(h[0])):t.push(h.map(l)),t.push(e.outputs[d].serialize())}return t.push(this.otherwise.serialize()),t};var ut=function(e,t,r){this.type=e,this.branches=t,this.otherwise=r};function pt(e,t){return"=="===e||"!="===e?"boolean"===t.kind||"string"===t.kind||"number"===t.kind||"null"===t.kind||"value"===t.kind:"string"===t.kind||"number"===t.kind||"value"===t.kind}function ct(e,t,r,n){return 0===n.compare(t,r)}function dt(e,t,r){var n="=="!==e&&"!="!==e;return function(){function o(e,t,r){this.type=Y,this.lhs=e,this.rhs=t,this.collator=r,this.hasUntypedArgument="value"===e.type.kind||"value"===t.type.kind}return o.parse=function(e,t){if(3!==e.length&&4!==e.length)return t.error("Expected two or three arguments.");var r=e[0],i=t.parse(e[1],1,te);if(!i)return null;if(!pt(r,i.type))return t.concat(1).error('"'+r+"\" comparisons are not supported for type '"+ie(i.type)+"'.");var a=t.parse(e[2],2,te);if(!a)return null;if(!pt(r,a.type))return t.concat(2).error('"'+r+"\" comparisons are not supported for type '"+ie(a.type)+"'.");if(i.type.kind!==a.type.kind&&"value"!==i.type.kind&&"value"!==a.type.kind)return t.error("Cannot compare types '"+ie(i.type)+"' and '"+ie(a.type)+"'.");n&&("value"===i.type.kind&&"value"!==a.type.kind?i=new be(a.type,[i]):"value"!==i.type.kind&&"value"===a.type.kind&&(a=new be(i.type,[a])));var s=null;if(4===e.length){if("string"!==i.type.kind&&"string"!==a.type.kind&&"value"!==i.type.kind&&"value"!==a.type.kind)return t.error("Cannot use collator to compare non-string types.");if(!(s=t.parse(e[3],3,re)))return null}return new o(i,a,s)},o.prototype.evaluate=function(o){var i=this.lhs.evaluate(o),a=this.rhs.evaluate(o);if(n&&this.hasUntypedArgument){var s=fe(i),l=fe(a);if(s.kind!==l.kind||"string"!==s.kind&&"number"!==s.kind)throw new ve('Expected arguments for "'+e+'" to be (string, string) or (number, number), but found ('+s.kind+", "+l.kind+") instead.")}if(this.collator&&!n&&this.hasUntypedArgument){var u=fe(i),p=fe(a);if("string"!==u.kind||"string"!==p.kind)return t(o,i,a)}return this.collator?r(o,i,a,this.collator.evaluate(o)):t(o,i,a)},o.prototype.eachChild=function(e){e(this.lhs),e(this.rhs),this.collator&&e(this.collator)},o.prototype.possibleOutputs=function(){return[!0,!1]},o.prototype.serialize=function(){var t=[e];return this.eachChild(function(e){t.push(e.serialize())}),t},o}()}ut.parse=function(e,t){if(e.length<4)return t.error("Expected at least 3 arguments, but found only "+(e.length-1)+".");if(e.length%2!=0)return t.error("Expected an odd number of arguments.");var r;t.expectedType&&"value"!==t.expectedType.kind&&(r=t.expectedType);for(var n=[],o=1;o<e.length-1;o+=2){var i=t.parse(e[o],o,Y);if(!i)return null;var a=t.parse(e[o+1],o+1,r);if(!a)return null;n.push([i,a]),r=r||a.type}var s=t.parse(e[e.length-1],e.length-1,r);return s?new ut(r,n,s):null},ut.prototype.evaluate=function(e){for(var t=0,r=this.branches;t<r.length;t+=1){var n=r[t],o=n[0],i=n[1];if(o.evaluate(e))return i.evaluate(e)}return this.otherwise.evaluate(e)},ut.prototype.eachChild=function(e){for(var t=0,r=this.branches;t<r.length;t+=1){var n=r[t],o=n[0],i=n[1];e(o),e(i)}e(this.otherwise)},ut.prototype.possibleOutputs=function(){return(e=[]).concat.apply(e,this.branches.map(function(e){e[0];return e[1].possibleOutputs()})).concat(this.otherwise.possibleOutputs());var e},ut.prototype.serialize=function(){var e=["case"];return this.eachChild(function(t){e.push(t.serialize())}),e};var ht=dt("==",function(e,t,r){return t===r},ct),ft=dt("!=",function(e,t,r){return t!==r},function(e,t,r,n){return!ct(0,t,r,n)}),yt=dt("<",function(e,t,r){return t<r},function(e,t,r,n){return n.compare(t,r)<0}),mt=dt(">",function(e,t,r){return t>r},function(e,t,r,n){return n.compare(t,r)>0}),vt=dt("<=",function(e,t,r){return t<=r},function(e,t,r,n){return n.compare(t,r)<=0}),gt=dt(">=",function(e,t,r){return t>=r},function(e,t,r,n){return n.compare(t,r)>=0}),bt=function(e){this.type=X,this.input=e};bt.parse=function(e,t){if(2!==e.length)return t.error("Expected 1 argument, but found "+(e.length-1)+" instead.");var r=t.parse(e[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?t.error("Expected argument of type string or array, but found "+ie(r.type)+" instead."):new bt(r):null},bt.prototype.evaluate=function(e){var t=this.input.evaluate(e);if("string"==typeof t)return t.length;if(Array.isArray(t))return t.length;throw new ve("Expected value to be of type string or array, but found "+ie(fe(t))+" instead.")},bt.prototype.eachChild=function(e){e(this.input)},bt.prototype.possibleOutputs=function(){return[void 0]},bt.prototype.serialize=function(){var e=["length"];return this.eachChild(function(t){e.push(t.serialize())}),e};var xt={"==":ht,"!=":ft,">":mt,"<":yt,">=":gt,"<=":vt,array:be,at:st,boolean:be,case:ut,coalesce:it,collator:_e,format:xe,interpolate:nt,"interpolate-hcl":nt,"interpolate-lab":nt,length:bt,let:at,literal:me,match:lt,number:be,object:be,step:Ie,string:be,"to-boolean":ke,"to-color":ke,"to-number":ke,"to-string":ke,var:qe};function wt(e,t){var r=t[0],n=t[1],o=t[2],i=t[3];r=r.evaluate(e),n=n.evaluate(e),o=o.evaluate(e);var a=i?i.evaluate(e):1,s=he(r,n,o,a);if(s)throw new ve(s);return new ue(r/255*a,n/255*a,o/255*a,a)}function kt(e,t){return e in t}function jt(e,t){var r=t[e];return void 0===r?null:r}function zt(e){return{type:e}}function St(e){return{result:"success",value:e}}function _t(e){return{result:"error",value:e}}function Tt(e){return"data-driven"===e["property-type"]||"cross-faded-data-driven"===e["property-type"]}function Ot(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}function At(e){return!!e.expression&&e.expression.interpolated}function qt(e){return e instanceof Number?"number":e instanceof String?"string":e instanceof Boolean?"boolean":Array.isArray(e)?"array":null===e?"null":typeof e}function Ct(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Et(e){return e}function It(e,t){var r,n,o,i="color"===t.type,a=e.stops&&"object"==typeof e.stops[0][0],s=a||void 0!==e.property,l=a||!s,u=e.type||(At(t)?"exponential":"interval");if(i&&((e=B({},e)).stops&&(e.stops=e.stops.map(function(e){return[e[0],ue.parse(e[1])]})),e.default?e.default=ue.parse(e.default):e.default=ue.parse(t.default)),e.colorSpace&&"rgb"!==e.colorSpace&&!rt[e.colorSpace])throw new Error("Unknown color space: "+e.colorSpace);if("exponential"===u)r=Pt;else if("interval"===u)r=Rt;else if("categorical"===u){r=Mt,n=Object.create(null);for(var p=0,c=e.stops;p<c.length;p+=1){var d=c[p];n[d[0]]=d[1]}o=typeof e.stops[0][0]}else{if("identity"!==u)throw new Error('Unknown function type "'+u+'"');r=Lt}if(a){for(var h={},f=[],y=0;y<e.stops.length;y++){var m=e.stops[y],v=m[0].zoom;void 0===h[v]&&(h[v]={zoom:v,type:e.type,property:e.property,default:e.default,stops:[]},f.push(v)),h[v].stops.push([m[0].value,m[1]])}for(var g=[],b=0,x=f;b<x.length;b+=1){var w=x[b];g.push([h[w].zoom,It(h[w],t)])}return{kind:"composite",interpolationFactor:nt.interpolationFactor.bind(void 0,{name:"linear"}),zoomStops:g.map(function(e){return e[0]}),evaluate:function(r,n){var o=r.zoom;return Pt({stops:g,base:e.base},t,o).evaluate(o,n)}}}return l?{kind:"camera",interpolationFactor:"exponential"===u?nt.interpolationFactor.bind(void 0,{name:"exponential",base:void 0!==e.base?e.base:1}):function(){return 0},zoomStops:e.stops.map(function(e){return e[0]}),evaluate:function(i){var a=i.zoom;return r(e,t,a,n,o)}}:{kind:"source",evaluate:function(i,a){var s=a&&a.properties?a.properties[e.property]:void 0;return void 0===s?Nt(e.default,t.default):r(e,t,s,n,o)}}}function Nt(e,t,r){return void 0!==e?e:void 0!==t?t:void 0!==r?r:void 0}function Mt(e,t,r,n,o){return Nt(typeof r===o?n[r]:void 0,e.default,t.default)}function Rt(e,t,r){if("number"!==qt(r))return Nt(e.default,t.default);var n=e.stops.length;if(1===n)return e.stops[0][1];if(r<=e.stops[0][0])return e.stops[0][1];if(r>=e.stops[n-1][0])return e.stops[n-1][1];var o=Ft(e.stops,r);return e.stops[o][1]}function Pt(e,t,r){var n=void 0!==e.base?e.base:1;if("number"!==qt(r))return Nt(e.default,t.default);var o=e.stops.length;if(1===o)return e.stops[0][1];if(r<=e.stops[0][0])return e.stops[0][1];if(r>=e.stops[o-1][0])return e.stops[o-1][1];var i=Ft(e.stops,r),a=function(e,t,r,n){var o=n-r,i=e-r;return 0===o?0:1===t?i/o:(Math.pow(t,i)-1)/(Math.pow(t,o)-1)}(r,n,e.stops[i][0],e.stops[i+1][0]),s=e.stops[i][1],l=e.stops[i+1][1],u=Pe[t.type]||Et;if(e.colorSpace&&"rgb"!==e.colorSpace){var p=rt[e.colorSpace];u=function(e,t){return p.reverse(p.interpolate(p.forward(e),p.forward(t),a))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var r=s.evaluate.apply(void 0,e),n=l.evaluate.apply(void 0,e);if(void 0!==r&&void 0!==n)return u(r,n,a)}}:u(s,l,a)}function Lt(e,t,r){return"color"===t.type?r=ue.parse(r):"formatted"===t.type?r=de.fromString(r.toString()):qt(r)===t.type||"enum"===t.type&&t.values[r]||(r=void 0),Nt(r,e.default,t.default)}function Ft(e,t){for(var r,n,o=0,i=e.length-1,a=0;o<=i;){if(r=e[a=Math.floor((o+i)/2)][0],n=e[a+1][0],t===r||t>r&&t<n)return a;r<t?o=a+1:r>t&&(i=a-1)}return Math.max(a-1,0)}Se.register(xt,{error:[{kind:"error"},[K],function(e,t){var r=t[0];throw new ve(r.evaluate(e))}],typeof:[K,[te],function(e,t){return ie(fe(t[0].evaluate(e)))}],"to-rgba":[oe(X,4),[Q],function(e,t){return t[0].evaluate(e).toArray()}],rgb:[Q,[X,X,X],wt],rgba:[Q,[X,X,X,X],wt],has:{type:Y,overloads:[[[K],function(e,t){return kt(t[0].evaluate(e),e.properties())}],[[K,ee],function(e,t){var r=t[0],n=t[1];return kt(r.evaluate(e),n.evaluate(e))}]]},get:{type:te,overloads:[[[K],function(e,t){return jt(t[0].evaluate(e),e.properties())}],[[K,ee],function(e,t){var r=t[0],n=t[1];return jt(r.evaluate(e),n.evaluate(e))}]]},"feature-state":[te,[K],function(e,t){return jt(t[0].evaluate(e),e.featureState||{})}],properties:[ee,[],function(e){return e.properties()}],"geometry-type":[K,[],function(e){return e.geometryType()}],id:[te,[],function(e){return e.id()}],zoom:[X,[],function(e){return e.globals.zoom}],"heatmap-density":[X,[],function(e){return e.globals.heatmapDensity||0}],"line-progress":[X,[],function(e){return e.globals.lineProgress||0}],"+":[X,zt(X),function(e,t){for(var r=0,n=0,o=t;n<o.length;n+=1){r+=o[n].evaluate(e)}return r}],"*":[X,zt(X),function(e,t){for(var r=1,n=0,o=t;n<o.length;n+=1){r*=o[n].evaluate(e)}return r}],"-":{type:X,overloads:[[[X,X],function(e,t){var r=t[0],n=t[1];return r.evaluate(e)-n.evaluate(e)}],[[X],function(e,t){return-t[0].evaluate(e)}]]},"/":[X,[X,X],function(e,t){var r=t[0],n=t[1];return r.evaluate(e)/n.evaluate(e)}],"%":[X,[X,X],function(e,t){var r=t[0],n=t[1];return r.evaluate(e)%n.evaluate(e)}],ln2:[X,[],function(){return Math.LN2}],pi:[X,[],function(){return Math.PI}],e:[X,[],function(){return Math.E}],"^":[X,[X,X],function(e,t){var r=t[0],n=t[1];return Math.pow(r.evaluate(e),n.evaluate(e))}],sqrt:[X,[X],function(e,t){var r=t[0];return Math.sqrt(r.evaluate(e))}],log10:[X,[X],function(e,t){var r=t[0];return Math.log(r.evaluate(e))/Math.LN10}],ln:[X,[X],function(e,t){var r=t[0];return Math.log(r.evaluate(e))}],log2:[X,[X],function(e,t){var r=t[0];return Math.log(r.evaluate(e))/Math.LN2}],sin:[X,[X],function(e,t){var r=t[0];return Math.sin(r.evaluate(e))}],cos:[X,[X],function(e,t){var r=t[0];return Math.cos(r.evaluate(e))}],tan:[X,[X],function(e,t){var r=t[0];return Math.tan(r.evaluate(e))}],asin:[X,[X],function(e,t){var r=t[0];return Math.asin(r.evaluate(e))}],acos:[X,[X],function(e,t){var r=t[0];return Math.acos(r.evaluate(e))}],atan:[X,[X],function(e,t){var r=t[0];return Math.atan(r.evaluate(e))}],min:[X,zt(X),function(e,t){return Math.min.apply(Math,t.map(function(t){return t.evaluate(e)}))}],max:[X,zt(X),function(e,t){return Math.max.apply(Math,t.map(function(t){return t.evaluate(e)}))}],abs:[X,[X],function(e,t){var r=t[0];return Math.abs(r.evaluate(e))}],round:[X,[X],function(e,t){var r=t[0].evaluate(e);return r<0?-Math.round(-r):Math.round(r)}],floor:[X,[X],function(e,t){var r=t[0];return Math.floor(r.evaluate(e))}],ceil:[X,[X],function(e,t){var r=t[0];return Math.ceil(r.evaluate(e))}],"filter-==":[Y,[K,te],function(e,t){var r=t[0],n=t[1];return e.properties()[r.value]===n.value}],"filter-id-==":[Y,[te],function(e,t){var r=t[0];return e.id()===r.value}],"filter-type-==":[Y,[K],function(e,t){var r=t[0];return e.geometryType()===r.value}],"filter-<":[Y,[K,te],function(e,t){var r=t[0],n=t[1],o=e.properties()[r.value],i=n.value;return typeof o==typeof i&&o<i}],"filter-id-<":[Y,[te],function(e,t){var r=t[0],n=e.id(),o=r.value;return typeof n==typeof o&&n<o}],"filter->":[Y,[K,te],function(e,t){var r=t[0],n=t[1],o=e.properties()[r.value],i=n.value;return typeof o==typeof i&&o>i}],"filter-id->":[Y,[te],function(e,t){var r=t[0],n=e.id(),o=r.value;return typeof n==typeof o&&n>o}],"filter-<=":[Y,[K,te],function(e,t){var r=t[0],n=t[1],o=e.properties()[r.value],i=n.value;return typeof o==typeof i&&o<=i}],"filter-id-<=":[Y,[te],function(e,t){var r=t[0],n=e.id(),o=r.value;return typeof n==typeof o&&n<=o}],"filter->=":[Y,[K,te],function(e,t){var r=t[0],n=t[1],o=e.properties()[r.value],i=n.value;return typeof o==typeof i&&o>=i}],"filter-id->=":[Y,[te],function(e,t){var r=t[0],n=e.id(),o=r.value;return typeof n==typeof o&&n>=o}],"filter-has":[Y,[te],function(e,t){return t[0].value in e.properties()}],"filter-has-id":[Y,[],function(e){return null!==e.id()}],"filter-type-in":[Y,[oe(K)],function(e,t){return t[0].value.indexOf(e.geometryType())>=0}],"filter-id-in":[Y,[oe(te)],function(e,t){return t[0].value.indexOf(e.id())>=0}],"filter-in-small":[Y,[K,oe(te)],function(e,t){var r=t[0];return t[1].value.indexOf(e.properties()[r.value])>=0}],"filter-in-large":[Y,[K,oe(te)],function(e,t){var r=t[0],n=t[1];return function(e,t,r,n){for(;r<=n;){var o=r+n>>1;if(t[o]===e)return!0;t[o]>e?n=o-1:r=o+1}return!1}(e.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Y,overloads:[[[Y,Y],function(e,t){var r=t[0],n=t[1];return r.evaluate(e)&&n.evaluate(e)}],[zt(Y),function(e,t){for(var r=0,n=t;r<n.length;r+=1){if(!n[r].evaluate(e))return!1}return!0}]]},any:{type:Y,overloads:[[[Y,Y],function(e,t){var r=t[0],n=t[1];return r.evaluate(e)||n.evaluate(e)}],[zt(Y),function(e,t){for(var r=0,n=t;r<n.length;r+=1){if(n[r].evaluate(e))return!0}return!1}]]},"!":[Y,[Y],function(e,t){return!t[0].evaluate(e)}],"is-supported-script":[Y,[K],function(e,t){var r=t[0],n=e.globals&&e.globals.isSupportedScript;return!n||n(r.evaluate(e))}],upcase:[K,[K],function(e,t){return t[0].evaluate(e).toUpperCase()}],downcase:[K,[K],function(e,t){return t[0].evaluate(e).toLowerCase()}],concat:[K,zt(te),function(e,t){return t.map(function(t){return ye(t.evaluate(e))}).join("")}],"resolved-locale":[K,[re],function(e,t){return t[0].evaluate(e).resolvedLocale()}]});var $t=function(e,t){var r;this.expression=e,this._warningHistory={},this._evaluator=new ze,this._defaultValue="color"===(r=t).type&&Ct(r.default)?new ue(0,0,0,0):"color"===r.type?ue.parse(r.default)||null:void 0===r.default?null:r.default,this._enumValues="enum"===t.type?t.values:null};function Ut(e){return Array.isArray(e)&&e.length>0&&"string"==typeof e[0]&&e[0]in xt}function Jt(e,t){var r=new Ce(xt,[],function(e){var t={color:Q,string:K,number:X,enum:K,boolean:Y,formatted:ne};if("array"===e.type)return oe(t[e.value]||te,e.length);return t[e.type]}(t)),n=r.parse(e,void 0,void 0,void 0,"string"===t.type?{typeAnnotation:"coerce"}:void 0);return n?St(new $t(n,t)):_t(r.errors)}$t.prototype.evaluateWithoutErrorHandling=function(e,t,r){return this._evaluator.globals=e,this._evaluator.feature=t,this._evaluator.featureState=r,this.expression.evaluate(this._evaluator)},$t.prototype.evaluate=function(e,t,r){this._evaluator.globals=e,this._evaluator.feature=t||null,this._evaluator.featureState=r||null;try{var n=this.expression.evaluate(this._evaluator);if(null==n)return this._defaultValue;if(this._enumValues&&!(n in this._enumValues))throw new ve("Expected value to be one of "+Object.keys(this._enumValues).map(function(e){return JSON.stringify(e)}).join(", ")+", but found "+JSON.stringify(n)+" instead.");return n}catch(o){return this._warningHistory[o.message]||(this._warningHistory[o.message]=!0,"undefined"!=typeof console&&console.warn(o.message)),this._defaultValue}};var Dt=function(e,t){this.kind=e,this._styleExpression=t,this.isStateDependent="constant"!==e&&!Oe(t.expression)};Dt.prototype.evaluateWithoutErrorHandling=function(e,t,r){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r)},Dt.prototype.evaluate=function(e,t,r){return this._styleExpression.evaluate(e,t,r)};var Gt=function(e,t,r){this.kind=e,this.zoomStops=r.labels,this._styleExpression=t,this.isStateDependent="camera"!==e&&!Oe(t.expression),r instanceof nt&&(this._interpolationType=r.interpolation)};function Wt(e,t){if("error"===(e=Jt(e,t)).result)return e;var r=e.value.expression,n=Te(r);if(!n&&!Tt(t))return _t([new V("","data expressions not supported")]);var o=Ae(r,["zoom"]);if(!o&&!Ot(t))return _t([new V("","zoom expressions not supported")]);var i=function e(t){var r=null;if(t instanceof at)r=e(t.result);else if(t instanceof it)for(var n=0,o=t.args;n<o.length;n+=1){var i=o[n];if(r=e(i))break}else(t instanceof Ie||t instanceof nt)&&t.input instanceof Se&&"zoom"===t.input.name&&(r=t);if(r instanceof V)return r;t.eachChild(function(t){var n=e(t);n instanceof V?r=n:!r&&n?r=new V("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):r&&n&&r!==n&&(r=new V("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))});return r}(r);return i||o?i instanceof V?_t([i]):i instanceof nt&&!At(t)?_t([new V("",'"interpolate" expressions cannot be used with this property')]):St(i?new Gt(n?"camera":"composite",e.value,i):new Dt(n?"constant":"source",e.value)):_t([new V("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')])}Gt.prototype.evaluateWithoutErrorHandling=function(e,t,r){return this._styleExpression.evaluateWithoutErrorHandling(e,t,r)},Gt.prototype.evaluate=function(e,t,r){return this._styleExpression.evaluate(e,t,r)},Gt.prototype.interpolationFactor=function(e,t,r){return this._interpolationType?nt.interpolationFactor(this._interpolationType,e,t,r):0};var Bt=function(e,t){this._parameters=e,this._specification=t,B(this,It(this._parameters,this._specification))};function Vt(e){return"object"==typeof e?["literal",e]:e}function Ht(e,t){var r=e.stops;if(!r)return function(e,t){var r=["get",e.property];if(void 0===e.default)return"string"===t.type?["string",r]:r;if("enum"===t.type)return["match",r,Object.keys(t.values),r,e.default];var n=["color"===t.type?"to-color":t.type,r,Vt(e.default)];return"array"===t.type&&n.splice(1,0,t.value,t.length||null),n}(e,t);var n=r&&"object"==typeof r[0][0],o=n||void 0!==e.property,i=n||!o;return r=r.map(function(e){return!o&&t.tokens&&"string"==typeof e[1]?[e[0],tr(e[1])]:[e[0],Vt(e[1])]}),n?function(e,t,r){for(var n={},o={},i=[],a=0;a<r.length;a++){var s=r[a],l=s[0].zoom;void 0===n[l]&&(n[l]={zoom:l,type:e.type,property:e.property,default:e.default},o[l]=[],i.push(l)),o[l].push([s[0].value,s[1]])}if("exponential"===er({},t)){for(var u=[Zt(e),["linear"],["zoom"]],p=0,c=i;p<c.length;p+=1){var d=c[p],h=Kt(n[d],t,o[d]);Qt(u,d,h,!1)}return u}for(var f=["step",["zoom"]],y=0,m=i;y<m.length;y+=1){var v=m[y],g=Kt(n[v],t,o[v]);Qt(f,v,g,!0)}return Yt(f),f}(e,t,r):i?function(e,t,r,n){void 0===n&&(n=["zoom"]);var o,i=er(e,t),a=!1;if("interval"===i)o=["step",n],a=!0;else{if("exponential"!==i)throw new Error('Unknown zoom function type "'+i+'"');var s=void 0!==e.base?e.base:1;o=[Zt(e),["exponential",s],n]}for(var l=0,u=r;l<u.length;l+=1){var p=u[l];Qt(o,p[0],p[1],a)}return Yt(o),o}(e,t,r):Kt(e,t,r)}function Zt(e){switch(e.colorSpace){case"hcl":return"interpolate-hcl";case"lab":return"interpolate-lab";default:return"interpolate"}}function Xt(e,t){return void 0!==e?e:void 0!==t?t:void 0}function Kt(e,t,r){var n=er(e,t),o=["get",e.property];if("categorical"===n&&"boolean"==typeof r[0][0]){for(var i=["case"],a=0,s=r;a<s.length;a+=1){var l=s[a];i.push(["==",o,l[0]],l[1])}return i.push(Vt(Xt(e.default,t.default))),i}if("categorical"===n){for(var u=["match",o],p=0,c=r;p<c.length;p+=1){var d=c[p];Qt(u,d[0],d[1],!1)}return u.push(Vt(Xt(e.default,t.default))),u}if("interval"===n){for(var h=["step",["number",o]],f=0,y=r;f<y.length;f+=1){var m=y[f];Qt(h,m[0],m[1],!0)}return Yt(h),void 0===e.default?h:["case",["==",["typeof",o],"number"],h,Vt(e.default)]}if("exponential"===n){for(var v=void 0!==e.base?e.base:1,g=[Zt(e),["exponential",v],["number",o]],b=0,x=r;b<x.length;b+=1){var w=x[b];Qt(g,w[0],w[1],!1)}return void 0===e.default?g:["case",["==",["typeof",o],"number"],g,Vt(e.default)]}throw new Error("Unknown property function type "+n)}function Yt(e){"step"===e[0]&&3===e.length&&(e.push(0),e.push(e[3]))}function Qt(e,t,r,n){e.length>3&&t===e[e.length-2]||(n&&2===e.length||e.push(t),e.push(r))}function er(e,t){return e.type?e.type:t.expression.interpolated?"exponential":"interval"}function tr(e){for(var t=["concat"],r=/{([^{}]+)}/g,n=0,o=r.exec(e);null!==o;o=r.exec(e)){var i=e.slice(n,r.lastIndex-o[0].length);n=r.lastIndex,i.length>0&&t.push(i),t.push(["get",o[1]])}if(1===t.length)return e;if(n<e.length)t.push(e.slice(n));else if(2===t.length)return["to-string",t[1]];return t}function rr(e){if(!0===e||!1===e)return!0;if(!Array.isArray(e)||0===e.length)return!1;switch(e[0]){case"has":return e.length>=2&&"$id"!==e[1]&&"$type"!==e[1];case"in":case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==e.length||Array.isArray(e[1])||Array.isArray(e[2]);case"any":case"all":for(var t=0,r=e.slice(1);t<r.length;t+=1){var n=r[t];if(!rr(n)&&"boolean"!=typeof n)return!1}return!0;default:return!0}}Bt.deserialize=function(e){return new Bt(e._parameters,e._specification)},Bt.serialize=function(e){return{_parameters:e._parameters,_specification:e._specification}};var nr={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function or(e,t){return e<t?-1:e>t?1:0}function ir(e){if(!e)return!0;var t,r=e[0];return e.length<=1?"any"!==r:"=="===r?ar(e[1],e[2],"=="):"!="===r?ur(ar(e[1],e[2],"==")):"<"===r||">"===r||"<="===r||">="===r?ar(e[1],e[2],r):"any"===r?(t=e.slice(1),["any"].concat(t.map(ir))):"all"===r?["all"].concat(e.slice(1).map(ir)):"none"===r?["all"].concat(e.slice(1).map(ir).map(ur)):"in"===r?sr(e[1],e.slice(2)):"!in"===r?ur(sr(e[1],e.slice(2))):"has"===r?lr(e[1]):"!has"!==r||ur(lr(e[1]))}function ar(e,t,r){switch(e){case"$type":return["filter-type-"+r,t];case"$id":return["filter-id-"+r,t];default:return["filter-"+r,e,t]}}function sr(e,t){if(0===t.length)return!1;switch(e){case"$type":return["filter-type-in",["literal",t]];case"$id":return["filter-id-in",["literal",t]];default:return t.length>200&&!t.some(function(e){return typeof e!=typeof t[0]})?["filter-in-large",e,["literal",t.sort(or)]]:["filter-in-small",e,["literal",t]]}}function lr(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function ur(e){return["!",e]}function pr(e){return function e(t,r){if(rr(t))return t;if(!t)return!0;var n=t[0];if(t.length<=1)return"any"!==n;var o;if("=="===n||"!="===n||"<"===n||">"===n||"<="===n||">="===n){var i=t,a=i[1],s=i[2];o=function(e,t,r,n){var o;if("$type"===e)return[r,["geometry-type"],t];o="$id"===e?["id"]:["get",e];if(n&&null!==t){var i=typeof t;n[e]=i}if("=="===r&&"$id"!==e&&null===t)return["all",["has",e],["==",o,null]];if("!="===r&&"$id"!==e&&null===t)return["any",["!",["has",e]],["!=",o,null]];return[r,o,t]}(a,s,n,r)}else{if("any"===n){var l=t.slice(1).map(function(t){var r={},n=e(t,r),o=function(e){var t=[];for(var r in e){var n="$id"===r?["id"]:["get",r];t.push(["==",["typeof",n],e[r]])}if(0===t.length)return!0;if(1===t.length)return t[0];return["all"].concat(t)}(r);return!0===o?n:["case",o,n,!1]});return["any"].concat(l)}if("all"===n){var u=t.slice(1).map(function(t){return e(t,r)});return u.length>1?["all"].concat(u):(p=[]).concat.apply(p,u)}if("none"===n)return["!",e(["any"].concat(t.slice(1)),{})];o="in"===n?cr(t[1],t.slice(2)):"!in"===n?cr(t[1],t.slice(2),!0):"has"===n?dr(t[1]):"!has"!==n||["!",dr(t[1])]}return o;var p}(e,{})}function cr(e,t,r){if(void 0===r&&(r=!1),0===t.length)return r;var n;n="$type"===e?["geometry-type"]:"$id"===e?["id"]:["get",e];for(var o=!0,i=typeof t[0],a=0,s=t;a<s.length;a+=1){if(typeof s[a]!==i){o=!1;break}}return!o||"string"!==i&&"number"!==i?[r?"all":"any"].concat(t.map(function(e){return[r?"!=":"==",n,e]})):["match",n,t,!r,r]}function dr(e){return"$type"===e||("$id"===e?["!=",["id"],null]:["has",e])}function hr(e,t){if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(var r=0;r<e.length;r++)if(!hr(e[r],t[r]))return!1;return!0}if("object"==typeof e&&null!==e&&null!==t){if("object"!=typeof t)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!hr(e[n],t[n]))return!1;return!0}return e===t}var fr={setStyle:"setStyle",addLayer:"addLayer",removeLayer:"removeLayer",setPaintProperty:"setPaintProperty",setLayoutProperty:"setLayoutProperty",setFilter:"setFilter",addSource:"addSource",removeSource:"removeSource",setGeoJSONSourceData:"setGeoJSONSourceData",setLayerZoomRange:"setLayerZoomRange",setLayerProperty:"setLayerProperty",setCenter:"setCenter",setZoom:"setZoom",setBearing:"setBearing",setPitch:"setPitch",setSprite:"setSprite",setGlyphs:"setGlyphs",setTransition:"setTransition",setLight:"setLight"};function yr(e,t,r){r.push({command:fr.addSource,args:[e,t[e]]})}function mr(e,t,r){t.push({command:fr.removeSource,args:[e]}),r[e]=!0}function vr(e,t,r,n){mr(e,r,n),yr(e,t,r)}function gr(e,t,r){var n;for(n in e[r])if(e[r].hasOwnProperty(n)&&"data"!==n&&!hr(e[r][n],t[r][n]))return!1;for(n in t[r])if(t[r].hasOwnProperty(n)&&"data"!==n&&!hr(e[r][n],t[r][n]))return!1;return!0}function br(e,t,r,n,o,i){var a;for(a in t=t||{},e=e||{})e.hasOwnProperty(a)&&(hr(e[a],t[a])||r.push({command:i,args:[n,a,t[a],o]}));for(a in t)t.hasOwnProperty(a)&&!e.hasOwnProperty(a)&&(hr(e[a],t[a])||r.push({command:i,args:[n,a,t[a],o]}))}function xr(e){return e.id}function wr(e,t){return e[t.id]=t,e}var kr=function(e,t,r,n){this.message=(e?e+": ":"")+r,n&&(this.identifier=n),null!=t&&t.__line__&&(this.line=t.__line__)};function jr(e){this.error=e,this.message=e.message;var t=e.message.match(/line (\d+)/);this.line=t?parseInt(t[1],10):0}function zr(e){var t=e.key,r=e.value;return r?[new kr(t,r,"constants have been deprecated as of v8")]:[]}function Sr(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}function _r(e){return Array.isArray(e)?e.map(_r):Sr(e)}function Tr(e){var t=e.key,r=e.value,n=e.valueSpec||{},o=e.objectElementValidators||{},i=e.style,a=e.styleSpec,s=[],l=qt(r);if("object"!==l)return[new kr(t,r,"object expected, "+l+" found")];for(var u in r){var p=u.split(".")[0],c=n[p]||n["*"],d=void 0;if(o[p])d=o[p];else if(n[p])d=Jr;else if(o["*"])d=o["*"];else{if(!n["*"]){s.push(new kr(t,r[u],'unknown property "'+u+'"'));continue}d=Jr}s=s.concat(d({key:(t?t+".":t)+u,value:r[u],valueSpec:c,style:i,styleSpec:a,object:r,objectKey:u},r))}for(var h in n)o[h]||n[h].required&&void 0===n[h].default&&void 0===r[h]&&s.push(new kr(t,r,'missing required property "'+h+'"'));return s}function Or(e){var t=e.value,r=e.valueSpec,n=e.style,o=e.styleSpec,i=e.key,a=e.arrayElementValidator||Jr;if("array"!==qt(t))return[new kr(i,t,"array expected, "+qt(t)+" found")];if(r.length&&t.length!==r.length)return[new kr(i,t,"array length "+r.length+" expected, length "+t.length+" found")];if(r["min-length"]&&t.length<r["min-length"])return[new kr(i,t,"array length at least "+r["min-length"]+" expected, length "+t.length+" found")];var s={type:r.value};o.$version<7&&(s.function=r.function),"object"===qt(r.value)&&(s=r.value);for(var l=[],u=0;u<t.length;u++)l=l.concat(a({array:t,arrayIndex:u,value:t[u],valueSpec:s,style:n,styleSpec:o,key:i+"["+u+"]"}));return l}function Ar(e){var t=e.key,r=e.value,n=e.valueSpec,o=qt(r);return"number"!==o?[new kr(t,r,"number expected, "+o+" found")]:"minimum"in n&&r<n.minimum?[new kr(t,r,r+" is less than the minimum value "+n.minimum)]:"maximum"in n&&r>n.maximum?[new kr(t,r,r+" is greater than the maximum value "+n.maximum)]:[]}function qr(e){var t,r,n,o=e.valueSpec,i=Sr(e.value.type),a={},s="categorical"!==i&&void 0===e.value.property,l=!s,u="array"===qt(e.value.stops)&&"array"===qt(e.value.stops[0])&&"object"===qt(e.value.stops[0][0]),p=Tr({key:e.key,value:e.value,valueSpec:e.styleSpec.function,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{stops:function(e){if("identity"===i)return[new kr(e.key,e.value,'identity function may not have a "stops" property')];var t=[],r=e.value;t=t.concat(Or({key:e.key,value:r,valueSpec:e.valueSpec,style:e.style,styleSpec:e.styleSpec,arrayElementValidator:c})),"array"===qt(r)&&0===r.length&&t.push(new kr(e.key,r,"array must have at least one stop"));return t},default:function(e){return Jr({key:e.key,value:e.value,valueSpec:o,style:e.style,styleSpec:e.styleSpec})}}});return"identity"===i&&s&&p.push(new kr(e.key,e.value,'missing required property "property"')),"identity"===i||e.value.stops||p.push(new kr(e.key,e.value,'missing required property "stops"')),"exponential"===i&&e.valueSpec.expression&&!At(e.valueSpec)&&p.push(new kr(e.key,e.value,"exponential functions not supported")),e.styleSpec.$version>=8&&(l&&!Tt(e.valueSpec)?p.push(new kr(e.key,e.value,"property functions not supported")):s&&!Ot(e.valueSpec)&&p.push(new kr(e.key,e.value,"zoom functions not supported"))),"categorical"!==i&&!u||void 0!==e.value.property||p.push(new kr(e.key,e.value,'"property" property is required')),p;function c(e){var t=[],i=e.value,s=e.key;if("array"!==qt(i))return[new kr(s,i,"array expected, "+qt(i)+" found")];if(2!==i.length)return[new kr(s,i,"array length 2 expected, length "+i.length+" found")];if(u){if("object"!==qt(i[0]))return[new kr(s,i,"object expected, "+qt(i[0])+" found")];if(void 0===i[0].zoom)return[new kr(s,i,"object stop key must have zoom")];if(void 0===i[0].value)return[new kr(s,i,"object stop key must have value")];if(n&&n>Sr(i[0].zoom))return[new kr(s,i[0].zoom,"stop zoom values must appear in ascending order")];Sr(i[0].zoom)!==n&&(n=Sr(i[0].zoom),r=void 0,a={}),t=t.concat(Tr({key:s+"[0]",value:i[0],valueSpec:{zoom:{}},style:e.style,styleSpec:e.styleSpec,objectElementValidators:{zoom:Ar,value:d}}))}else t=t.concat(d({key:s+"[0]",value:i[0],valueSpec:{},style:e.style,styleSpec:e.styleSpec},i));return Ut(_r(i[1]))?t.concat([new kr(s+"[1]",i[1],"expressions are not allowed in function stops.")]):t.concat(Jr({key:s+"[1]",value:i[1],valueSpec:o,style:e.style,styleSpec:e.styleSpec}))}function d(e,n){var s=qt(e.value),l=Sr(e.value),u=null!==e.value?e.value:n;if(t){if(s!==t)return[new kr(e.key,u,s+" stop domain type must match previous stop domain type "+t)]}else t=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new kr(e.key,u,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==i){var p="number expected, "+s+" found";return Tt(o)&&void 0===i&&(p+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new kr(e.key,u,p)]}return"categorical"!==i||"number"!==s||isFinite(l)&&Math.floor(l)===l?"categorical"!==i&&"number"===s&&void 0!==r&&l<r?[new kr(e.key,u,"stop domain values must appear in ascending order")]:(r=l,"categorical"===i&&l in a?[new kr(e.key,u,"stop domain values must be unique")]:(a[l]=!0,[])):[new kr(e.key,u,"integer expected, found "+l)]}}function Cr(e){var t=("property"===e.expressionContext?Wt:Jt)(_r(e.value),e.valueSpec);return"error"===t.result?t.value.map(function(t){return new kr(""+e.key+t.key,e.value,t.message)}):"property"===e.expressionContext&&"text-font"===e.propertyKey&&-1!==t.value._styleExpression.expression.possibleOutputs().indexOf(void 0)?[new kr(e.key,e.value,'Invalid data expression for "'+e.propertyKey+'". Output values must be contained as literals within the expression.')]:"property"!==e.expressionContext||"layout"!==e.propertyType||Oe(t.value._styleExpression.expression)?"filter"!==e.expressionContext||Oe(t.value.expression)?[]:[new kr(e.key,e.value,'"feature-state" data expressions are not supported with filters.')]:[new kr(e.key,e.value,'"feature-state" data expressions are not supported with layout properties.')]}function Er(e){var t=e.key,r=e.value,n=e.valueSpec,o=[];return Array.isArray(n.values)?-1===n.values.indexOf(Sr(r))&&o.push(new kr(t,r,"expected one of ["+n.values.join(", ")+"], "+JSON.stringify(r)+" found")):-1===Object.keys(n.values).indexOf(Sr(r))&&o.push(new kr(t,r,"expected one of ["+Object.keys(n.values).join(", ")+"], "+JSON.stringify(r)+" found")),o}function Ir(e){return rr(_r(e.value))?Cr(B({},e,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function e(t){var r=t.value;var n=t.key;if("array"!==qt(r))return[new kr(n,r,"array expected, "+qt(r)+" found")];var o=t.styleSpec;var i;var a=[];if(r.length<1)return[new kr(n,r,"filter array must have at least 1 element")];a=a.concat(Er({key:n+"[0]",value:r[0],valueSpec:o.filter_operator,style:t.style,styleSpec:t.styleSpec}));switch(Sr(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&"$type"===Sr(r[1])&&a.push(new kr(n,r,'"$type" cannot be use with operator "'+r[0]+'"'));case"==":case"!=":3!==r.length&&a.push(new kr(n,r,'filter array for operator "'+r[0]+'" must have 3 elements'));case"in":case"!in":r.length>=2&&"string"!==(i=qt(r[1]))&&a.push(new kr(n+"[1]",r[1],"string expected, "+i+" found"));for(var s=2;s<r.length;s++)i=qt(r[s]),"$type"===Sr(r[1])?a=a.concat(Er({key:n+"["+s+"]",value:r[s],valueSpec:o.geometry_type,style:t.style,styleSpec:t.styleSpec})):"string"!==i&&"number"!==i&&"boolean"!==i&&a.push(new kr(n+"["+s+"]",r[s],"string, number, or boolean expected, "+i+" found"));break;case"any":case"all":case"none":for(var l=1;l<r.length;l++)a=a.concat(e({key:n+"["+l+"]",value:r[l],style:t.style,styleSpec:t.styleSpec}));break;case"has":case"!has":i=qt(r[1]),2!==r.length?a.push(new kr(n,r,'filter array for "'+r[0]+'" operator must have 2 elements')):"string"!==i&&a.push(new kr(n+"[1]",r[1],"string expected, "+i+" found"))}return a}(e)}function Nr(e,t){var r=e.key,n=e.style,o=e.styleSpec,i=e.value,a=e.objectKey,s=o[t+"_"+e.layerType];if(!s)return[];var l=a.match(/^(.*)-transition$/);if("paint"===t&&l&&s[l[1]]&&s[l[1]].transition)return Jr({key:r,value:i,valueSpec:o.transition,style:n,styleSpec:o});var u,p=e.valueSpec||s[a];if(!p)return[new kr(r,i,'unknown property "'+a+'"')];if("string"===qt(i)&&Tt(p)&&!p.tokens&&(u=/^{([^}]+)}$/.exec(i)))return[new kr(r,i,'"'+a+'" does not support interpolation syntax\nUse an identity property function instead: `{ "type": "identity", "property": '+JSON.stringify(u[1])+" }`.")];var c=[];return"symbol"===e.layerType&&("text-field"===a&&n&&!n.glyphs&&c.push(new kr(r,i,'use of "text-field" requires a style "glyphs" property')),"text-font"===a&&Ct(_r(i))&&"identity"===Sr(i.type)&&c.push(new kr(r,i,'"text-font" does not support identity functions'))),c.concat(Jr({key:e.key,value:i,valueSpec:p,style:n,styleSpec:o,expressionContext:"property",propertyType:t,propertyKey:a}))}function Mr(e){return Nr(e,"paint")}function Rr(e){return Nr(e,"layout")}function Pr(e){var t=[],r=e.value,n=e.key,o=e.style,i=e.styleSpec;r.type||r.ref||t.push(new kr(n,r,'either "type" or "ref" is required'));var a,s=Sr(r.type),l=Sr(r.ref);if(r.id)for(var u=Sr(r.id),p=0;p<e.arrayIndex;p++){var c=o.layers[p];Sr(c.id)===u&&t.push(new kr(n,r.id,'duplicate layer id "'+r.id+'", previously used at line '+c.id.__line__))}if("ref"in r)["type","source","source-layer","filter","layout"].forEach(function(e){e in r&&t.push(new kr(n,r[e],'"'+e+'" is prohibited for ref layers'))}),o.layers.forEach(function(e){Sr(e.id)===l&&(a=e)}),a?a.ref?t.push(new kr(n,r.ref,"ref cannot reference another ref layer")):s=Sr(a.type):t.push(new kr(n,r.ref,'ref layer "'+l+'" not found'));else if("background"!==s)if(r.source){var d=o.sources&&o.sources[r.source],h=d&&Sr(d.type);d?"vector"===h&&"raster"===s?t.push(new kr(n,r.source,'layer "'+r.id+'" requires a raster source')):"raster"===h&&"raster"!==s?t.push(new kr(n,r.source,'layer "'+r.id+'" requires a vector source')):"vector"!==h||r["source-layer"]?"raster-dem"===h&&"hillshade"!==s?t.push(new kr(n,r.source,"raster-dem source can only be used with layer type 'hillshade'.")):"line"!==s||!r.paint||!r.paint["line-gradient"]||"geojson"===h&&d.lineMetrics||t.push(new kr(n,r,'layer "'+r.id+'" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):t.push(new kr(n,r,'layer "'+r.id+'" must specify a "source-layer"')):t.push(new kr(n,r.source,'source "'+r.source+'" not found'))}else t.push(new kr(n,r,'missing required property "source"'));return t=t.concat(Tr({key:n,value:r,valueSpec:i.layer,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{"*":function(){return[]},type:function(){return Jr({key:n+".type",value:r.type,valueSpec:i.layer.type,style:e.style,styleSpec:e.styleSpec,object:r,objectKey:"type"})},filter:Ir,layout:function(e){return Tr({layer:r,key:e.key,value:e.value,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{"*":function(e){return Rr(B({layerType:s},e))}}})},paint:function(e){return Tr({layer:r,key:e.key,value:e.value,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{"*":function(e){return Mr(B({layerType:s},e))}}})}}}))}function Lr(e){var t=e.value,r=e.key,n=e.styleSpec,o=e.style;if(!t.type)return[new kr(r,t,'"type" is required')];var i=Sr(t.type),a=[];switch(i){case"vector":case"raster":case"raster-dem":if(a=a.concat(Tr({key:r,value:t,valueSpec:n["source_"+i.replace("-","_")],style:e.style,styleSpec:n})),"url"in t)for(var s in t)["type","url","tileSize"].indexOf(s)<0&&a.push(new kr(r+"."+s,t[s],'a source with a "url" property may not include a "'+s+'" property'));return a;case"geojson":return Tr({key:r,value:t,valueSpec:n.source_geojson,style:o,styleSpec:n});case"video":return Tr({key:r,value:t,valueSpec:n.source_video,style:o,styleSpec:n});case"image":return Tr({key:r,value:t,valueSpec:n.source_image,style:o,styleSpec:n});case"canvas":return a.push(new kr(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")),a;default:return Er({key:r+".type",value:t.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:o,styleSpec:n})}}function Fr(e){var t=e.value,r=e.styleSpec,n=r.light,o=e.style,i=[],a=qt(t);if(void 0===t)return i;if("object"!==a)return i=i.concat([new kr("light",t,"object expected, "+a+" found")]);for(var s in t){var l=s.match(/^(.*)-transition$/);i=l&&n[l[1]]&&n[l[1]].transition?i.concat(Jr({key:s,value:t[s],valueSpec:r.transition,style:o,styleSpec:r})):n[s]?i.concat(Jr({key:s,value:t[s],valueSpec:n[s],style:o,styleSpec:r})):i.concat([new kr(s,t[s],'unknown property "'+s+'"')])}return i}function $r(e){var t=e.value,r=e.key,n=qt(t);return"string"!==n?[new kr(r,t,"string expected, "+n+" found")]:[]}var Ur={"*":function(){return[]},array:Or,boolean:function(e){var t=e.value,r=e.key,n=qt(t);return"boolean"!==n?[new kr(r,t,"boolean expected, "+n+" found")]:[]},number:Ar,color:function(e){var t=e.key,r=e.value,n=qt(r);return"string"!==n?[new kr(t,r,"color expected, "+n+" found")]:null===le(r)?[new kr(t,r,'color expected, "'+r+'" found')]:[]},constants:zr,enum:Er,filter:Ir,function:qr,layer:Pr,object:Tr,source:Lr,light:Fr,string:$r,formatted:function(e){return 0===$r(e).length?[]:Cr(e)}};function Jr(e){var t=e.value,r=e.valueSpec,n=e.styleSpec;return r.expression&&Ct(Sr(t))?qr(e):r.expression&&Ut(_r(t))?Cr(e):r.type&&Ur[r.type]?Ur[r.type](e):Tr(B({},e,{valueSpec:r.type?n[r.type]:r}))}function Dr(e){var t=e.value,r=e.key,n=$r(e);return n.length?n:(-1===t.indexOf("{fontstack}")&&n.push(new kr(r,t,'"glyphs" url must include a "{fontstack}" token')),-1===t.indexOf("{range}")&&n.push(new kr(r,t,'"glyphs" url must include a "{range}" token')),n)}function Gr(e,t){t=t||n;var r=[];return r=r.concat(Jr({key:"",value:e,valueSpec:t.$root,styleSpec:t,style:e,objectElementValidators:{glyphs:Dr,"*":function(){return[]}}})),e.constants&&(r=r.concat(zr({key:"constants",value:e.constants,style:e,styleSpec:t}))),Wr(r)}function Wr(e){return[].concat(e).sort(function(e,t){return e.line-t.line})}function Br(e){return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];return Wr(e.apply(this,t))}}Gr.source=Br(Lr),Gr.light=Br(Fr),Gr.layer=Br(Pr),Gr.filter=Br(Ir),Gr.paintProperty=Br(Mr),Gr.layoutProperty=Br(Rr);var Vr=u(function(e,t){var r=function(){var e=function(e,t,r,n){for(r=r||{},n=e.length;n--;r[e[n]]=t);return r},t=[1,12],r=[1,13],n=[1,9],o=[1,10],i=[1,11],a=[1,14],s=[1,15],l=[14,18,22,24],u=[18,22],p=[22,24],c={trace:function(){},yy:{},symbols_:{error:2,JSONString:3,STRING:4,JSONNumber:5,NUMBER:6,JSONNullLiteral:7,NULL:8,JSONBooleanLiteral:9,TRUE:10,FALSE:11,JSONText:12,JSONValue:13,EOF:14,JSONObject:15,JSONArray:16,"{":17,"}":18,JSONMemberList:19,JSONMember:20,":":21,",":22,"[":23,"]":24,JSONElementList:25,$accept:0,$end:1},terminals_:{2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},productions_:[0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],performAction:function(e,t,r,n,o,i,a){var s=i.length-1;switch(o){case 1:this.$=new String(e.replace(/\\(\\|")/g,"$1").replace(/\\n/g,"\n").replace(/\\r/g,"\r").replace(/\\t/g,"\t").replace(/\\v/g,"\v").replace(/\\f/g,"\f").replace(/\\b/g,"\b")),this.$.__line__=this._$.first_line;break;case 2:this.$=new Number(e),this.$.__line__=this._$.first_line;break;case 3:this.$=null;break;case 4:this.$=new Boolean(!0),this.$.__line__=this._$.first_line;break;case 5:this.$=new Boolean(!1),this.$.__line__=this._$.first_line;break;case 6:return this.$=i[s-1];case 13:this.$={},Object.defineProperty(this.$,"__line__",{value:this._$.first_line,enumerable:!1});break;case 14:case 19:this.$=i[s-1],Object.defineProperty(this.$,"__line__",{value:this._$.first_line,enumerable:!1});break;case 15:this.$=[i[s-2],i[s]];break;case 16:this.$={},this.$[i[s][0]]=i[s][1];break;case 17:this.$=i[s-2],i[s-2][i[s][0]]=i[s][1];break;case 18:this.$=[],Object.defineProperty(this.$,"__line__",{value:this._$.first_line,enumerable:!1});break;case 20:this.$=[i[s]];break;case 21:this.$=i[s-2],i[s-2].push(i[s])}},table:[{3:5,4:t,5:6,6:r,7:3,8:n,9:4,10:o,11:i,12:1,13:2,15:7,16:8,17:a,23:s},{1:[3]},{14:[1,16]},e(l,[2,7]),e(l,[2,8]),e(l,[2,9]),e(l,[2,10]),e(l,[2,11]),e(l,[2,12]),e(l,[2,3]),e(l,[2,4]),e(l,[2,5]),e([14,18,21,22,24],[2,1]),e(l,[2,2]),{3:20,4:t,18:[1,17],19:18,20:19},{3:5,4:t,5:6,6:r,7:3,8:n,9:4,10:o,11:i,13:23,15:7,16:8,17:a,23:s,24:[1,21],25:22},{1:[2,6]},e(l,[2,13]),{18:[1,24],22:[1,25]},e(u,[2,16]),{21:[1,26]},e(l,[2,18]),{22:[1,28],24:[1,27]},e(p,[2,20]),e(l,[2,14]),{3:20,4:t,20:29},{3:5,4:t,5:6,6:r,7:3,8:n,9:4,10:o,11:i,13:30,15:7,16:8,17:a,23:s},e(l,[2,19]),{3:5,4:t,5:6,6:r,7:3,8:n,9:4,10:o,11:i,13:31,15:7,16:8,17:a,23:s},e(u,[2,17]),e(u,[2,15]),e(p,[2,21])],defaultActions:{16:[2,6]},parseError:function(e,t){if(!t.recoverable)throw new Error(e);this.trace(e)},parse:function(e){var t=this,r=[0],n=[null],o=[],i=this.table,a="",s=0,l=0,u=1,p=o.slice.call(arguments,1),c=Object.create(this.lexer),d={yy:{}};for(var h in this.yy)Object.prototype.hasOwnProperty.call(this.yy,h)&&(d.yy[h]=this.yy[h]);c.setInput(e,d.yy),d.yy.lexer=c,d.yy.parser=this,void 0===c.yylloc&&(c.yylloc={});var f=c.yylloc;o.push(f);var y=c.options&&c.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,v,g,b,x,w,k,j,z,S,_={};;){if(g=r[r.length-1],this.defaultActions[g]?b=this.defaultActions[g]:(null==m&&(S=void 0,"number"!=typeof(S=c.lex()||u)&&(S=t.symbols_[S]||S),m=S),b=i[g]&&i[g][m]),void 0===b||!b.length||!b[0]){var T="";for(w in z=[],i[g])this.terminals_[w]&&w>2&&z.push("'"+this.terminals_[w]+"'");T=c.showPosition?"Parse error on line "+(s+1)+":\n"+c.showPosition()+"\nExpecting "+z.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(s+1)+": Unexpected "+(m==u?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(T,{text:c.match,token:this.terminals_[m]||m,line:c.yylineno,loc:f,expected:z})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(b[0]){case 1:r.push(m),n.push(c.yytext),o.push(c.yylloc),r.push(b[1]),m=null,v?(m=v,v=null):(l=c.yyleng,a=c.yytext,s=c.yylineno,f=c.yylloc);break;case 2:if(k=this.productions_[b[1]][1],_.$=n[n.length-k],_._$={first_line:o[o.length-(k||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(k||1)].first_column,last_column:o[o.length-1].last_column},y&&(_._$.range=[o[o.length-(k||1)].range[0],o[o.length-1].range[1]]),void 0!==(x=this.performAction.apply(_,[a,l,s,d.yy,b[1],n,o].concat(p))))return x;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),o=o.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(_.$),o.push(_._$),j=i[r[r.length-2]][r[r.length-1]],r.push(j);break;case 3:return!0}}return!0}},d={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var r,n,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(n=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){var e,t,r,n;if(this.done)return this.EOF;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;i<o.length;i++)if((r=this._input.match(this.rules[o[i]]))&&(!t||r[0].length>t[0].length)){if(t=r,n=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(r,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[n]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,r,n){switch(r){case 0:break;case 1:return 6;case 2:return t.yytext=t.yytext.substr(1,t.yyleng-2),4;case 3:return 17;case 4:return 18;case 5:return 23;case 6:return 24;case 7:return 22;case 8:return 21;case 9:return 10;case 10:return 11;case 11:return 8;case 12:return 14;case 13:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt\/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};function h(){this.yy={}}return c.lexer=d,h.prototype=c,c.Parser=h,new h}();t.parser=r,t.Parser=r.Parser,t.parse=function(){return r.parse.apply(r,arguments)}});Vr.parser,Vr.Parser,Vr.parse;function Hr(e,t){if(e instanceof String||"string"==typeof e||e instanceof r)try{e=Vr.parse(e.toString())}catch(o){return[new jr(o)]}return Gr(e,t=t||n)}var Zr={StyleExpression:$t,isExpression:Ut,createExpression:Jt,createPropertyExpression:Wt,normalizePropertyExpression:function(e,t){if(Ct(e))return new Bt(e,t);if(Ut(e)){var r=Wt(e,t);if("error"===r.result)throw new Error(r.value.map(function(e){return e.key+": "+e.message}).join(", "));return r.value}var n=e;return"string"==typeof e&&"color"===t.type&&(n=ue.parse(e)),{kind:"constant",evaluate:function(){return n}}},ZoomConstantExpression:Dt,ZoomDependentExpression:Gt,StylePropertyFunction:Bt},Xr={convertFunction:Ht,createFunction:It,isFunction:Ct},Kr={eachSource:L,eachLayer:F,eachProperty:$};Hr.parsed=Hr,Hr.latest=Hr,e.v8=n,e.latest=n,e.format=function(e,t){return void 0===t&&(t=2),(e=s(e,n.$root)).layers&&(e.layers=e.layers.map(function(e){return s(e,n.layer)})),a(e,{indent:t})},e.migrate=function(e){var t=!1;if(7===e.version&&(e=W(e),t=!0),8===e.version&&(t=function(e){var t=[];return F(e,function(e){e.filter&&(e.filter=pr(e.filter))}),$(e,{paint:!0,layout:!0},function(e){var r=e.path,n=e.value,o=e.reference,i=e.set;Ut(n)||("object"!=typeof n||Array.isArray(n)?o.tokens&&"string"==typeof n&&i(tr(n)):(i(Ht(n,o)),t.push(r.join("."))))}),e}(e),t=!0),!t)throw new Error("cannot migrate from",e.version);return e},e.composite=function(e){var t=[],r=[],n=[];for(var o in e.sources){var i=e.sources[o];if("vector"===i.type){var a=/^mapbox:\/\/(.*)/.exec(i.url);a&&(t.push(o),r.push(a[1]))}}if(t.length<2)return e;t.forEach(function(t){delete e.sources[t]});var s=r.join(",");return e.sources[s]={type:"vector",url:"mapbox://"+s},e.layers.forEach(function(e){if(t.indexOf(e.source)>=0&&(e.source=s,"source-layer"in e)){if(n.indexOf(e["source-layer"])>=0)throw new Error("Conflicting source layer names");n.push(e["source-layer"])}}),e},e.diff=function(e,t){if(!e)return[{command:fr.setStyle,args:[t]}];var r=[];try{if(!hr(e.version,t.version))return[{command:fr.setStyle,args:[t]}];hr(e.center,t.center)||r.push({command:fr.setCenter,args:[t.center]}),hr(e.zoom,t.zoom)||r.push({command:fr.setZoom,args:[t.zoom]}),hr(e.bearing,t.bearing)||r.push({command:fr.setBearing,args:[t.bearing]}),hr(e.pitch,t.pitch)||r.push({command:fr.setPitch,args:[t.pitch]}),hr(e.sprite,t.sprite)||r.push({command:fr.setSprite,args:[t.sprite]}),hr(e.glyphs,t.glyphs)||r.push({command:fr.setGlyphs,args:[t.glyphs]}),hr(e.transition,t.transition)||r.push({command:fr.setTransition,args:[t.transition]}),hr(e.light,t.light)||r.push({command:fr.setLight,args:[t.light]});var n={},o=[];!function(e,t,r,n){var o;for(o in t=t||{},e=e||{})e.hasOwnProperty(o)&&(t.hasOwnProperty(o)||mr(o,r,n));for(o in t)t.hasOwnProperty(o)&&(e.hasOwnProperty(o)?hr(e[o],t[o])||("geojson"===e[o].type&&"geojson"===t[o].type&&gr(e,t,o)?r.push({command:fr.setGeoJSONSourceData,args:[o,t[o].data]}):vr(o,t,r,n)):yr(o,t,r))}(e.sources,t.sources,o,n);var i=[];e.layers&&e.layers.forEach(function(e){n[e.source]?r.push({command:fr.removeLayer,args:[e.id]}):i.push(e)}),r=r.concat(o),function(e,t,r){t=t||[];var n,o,i,a,s,l,u,p=(e=e||[]).map(xr),c=t.map(xr),d=e.reduce(wr,{}),h=t.reduce(wr,{}),f=p.slice(),y=Object.create(null);for(n=0,o=0;n<p.length;n++)i=p[n],h.hasOwnProperty(i)?o++:(r.push({command:fr.removeLayer,args:[i]}),f.splice(f.indexOf(i,o),1));for(n=0,o=0;n<c.length;n++)i=c[c.length-1-n],f[f.length-1-n]!==i&&(d.hasOwnProperty(i)?(r.push({command:fr.removeLayer,args:[i]}),f.splice(f.lastIndexOf(i,f.length-o),1)):o++,l=f[f.length-n],r.push({command:fr.addLayer,args:[h[i],l]}),f.splice(f.length-n,0,i),y[i]=!0);for(n=0;n<c.length;n++)if(a=d[i=c[n]],s=h[i],!y[i]&&!hr(a,s))if(hr(a.source,s.source)&&hr(a["source-layer"],s["source-layer"])&&hr(a.type,s.type)){for(u in br(a.layout,s.layout,r,i,null,fr.setLayoutProperty),br(a.paint,s.paint,r,i,null,fr.setPaintProperty),hr(a.filter,s.filter)||r.push({command:fr.setFilter,args:[i,s.filter]}),hr(a.minzoom,s.minzoom)&&hr(a.maxzoom,s.maxzoom)||r.push({command:fr.setLayerZoomRange,args:[i,s.minzoom,s.maxzoom]}),a)a.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?br(a[u],s[u],r,i,u.slice(6),fr.setPaintProperty):hr(a[u],s[u])||r.push({command:fr.setLayerProperty,args:[i,u,s[u]]}));for(u in s)s.hasOwnProperty(u)&&!a.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?br(a[u],s[u],r,i,u.slice(6),fr.setPaintProperty):hr(a[u],s[u])||r.push({command:fr.setLayerProperty,args:[i,u,s[u]]}))}else r.push({command:fr.removeLayer,args:[i]}),l=f[f.lastIndexOf(i)+1],r.push({command:fr.addLayer,args:[s,l]})}(i,t.layers,r)}catch(a){console.warn("Unable to compute style diff:",a),r=[{command:fr.setStyle,args:[t]}]}return r},e.ValidationError=kr,e.ParsingError=jr,e.expression=Zr,e.featureFilter=function(e){if(null==e)return function(){return!0};rr(e)||(e=ir(e));var t=Jt(e,nr);if("error"===t.result)throw new Error(t.value.map(function(e){return e.key+": "+e.message}).join(", "));return function(e,r){return t.value.evaluate(e,r)}},e.Color=ue,e.function=Xr,e.validate=Hr,e.visit=Kr,Object.defineProperty(e,"__esModule",{value:!0})});
+},{"buffer":"aMB2"}],"i69k":[function(require,module,exports) {
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=["type","source","source-layer","minzoom","maxzoom","filter","layout"];exports.default=e;
+},{}],"HYr1":[function(require,module,exports) {
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=t(require("./util/ref_properties"));function t(e){return e&&e.__esModule?e:{default:e}}function r(t,r){const n={};for(const e in t)"ref"!==e&&(n[e]=t[e]);return e.default.forEach(e=>{e in r&&(n[e]=r[e])}),n}var n=o;function o(e){e=e.slice();const t=Object.create(null);for(let r=0;r<e.length;r++)t[e[r].id]=e[r];for(let n=0;n<e.length;n++)"ref"in e[n]&&(e[n]=r(e[n],t[e[n].ref]));return e}exports.default=n;
+},{"./util/ref_properties":"i69k"}],"Ldbb":[function(require,module,exports) {
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=n;var e=r(require("../deref"));function r(e){return e&&e.__esModule?e:{default:e}}function t(e,r){for(const t in e.layers)r(e.layers[t])}function n(r){return r.version=9,r.layers=(0,e.default)(r.layers),t(r,e=>{for(const r in e)/paint\..*/.test(r)&&delete e[r]}),r}
+},{"../deref":"HYr1"}],"e7zg":[function(require,module,exports) {
+var define;
+var global = arguments[3];
+var e,t=arguments[3];!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof e&&e.amd?e(r):t.CodeMirror=r()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function A(e,t,r,n){var i=O(e,t,r,n);return i.setAttribute("role","presentation"),i}function D(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function W(){var e;try{e=document.activeElement}catch(wt){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function H(e,t){var r=e.className;L(t).test(r)||(e.className+=(r?" ":"")+t)}function F(e,t){for(var r=e.split(" "),n=0;n<r.length;n++)r[n]&&!L(r[n]).test(t)&&(t+=" "+r[n]);return t}k=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(wt){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var P=function(e){e.select()};function E(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function I(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function z(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(t){}});var R=function(){this.id=null};function B(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}R.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var G=30,U={toString:function(){return"CodeMirror.Pass"}},V={scroll:!1},K={origin:"*mouse"},j={origin:"+move"};function X(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[""];function _(e){for(;Y.length<=e;)Y.push($(Y)+" ");return Y[e]}function $(e){return e[e.length-1]}function q(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function Z(){}function Q(e,t){var r;return Object.create?r=Object.create(e):(Z.prototype=e,r=new Z),t&&I(t,r),r}var J=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ee(e){return/\w/.test(e)||e>"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:t<e.length)&&ie(e.charAt(t));)t+=r;return t}function le(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function se(e,t,n){var i=this;this.input=n,i.scrollbarFiller=O("div",null,"CodeMirror-scrollbar-filler"),i.scrollbarFiller.setAttribute("cm-not-content","true"),i.gutterFiller=O("div",null,"CodeMirror-gutter-filler"),i.gutterFiller.setAttribute("cm-not-content","true"),i.lineDiv=A("div",null,"CodeMirror-code"),i.selectionDiv=O("div",null,null,"position: relative; z-index: 1"),i.cursorDiv=O("div",null,"CodeMirror-cursors"),i.measure=O("div",null,"CodeMirror-measure"),i.lineMeasure=O("div",null,"CodeMirror-measure"),i.lineSpace=A("div",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,"position: relative; outline: none");var o=A("div",[i.lineSpace],"CodeMirror-lines");i.mover=O("div",[o],null,"position: relative"),i.sizer=O("div",[i.mover],"CodeMirror-sizer"),i.sizerWidth=null,i.heightForcer=O("div",null,null,"position: absolute; height: "+G+"px; width: 1px;"),i.gutters=O("div",null,"CodeMirror-gutters"),i.lineGutter=null,i.scroller=O("div",[i.sizer,i.heightForcer,i.gutters],"CodeMirror-scroll"),i.scroller.setAttribute("tabIndex","-1"),i.wrapper=O("div",[i.scrollbarFiller,i.gutterFiller,i.scroller],"CodeMirror"),l&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),a||r&&m||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,n.init(i)}function ae(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function ue(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function ce(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function he(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function fe(e){if(null==e.parent)return null;for(var t=e.parent,r=B(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function de(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return r+l}function pe(e,t){return t>=e.first&&t<e.first+e.size}function ge(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ve(e,t,r){if(void 0===r&&(r=null),!(this instanceof ve))return new ve(e,t,r);this.line=e,this.ch=t,this.sticky=r}function me(e,t){return e.line-t.line||e.ch-t.ch}function ye(e,t){return e.sticky==t.sticky&&0==me(e,t)}function be(e){return ve(e.line,e.ch)}function we(e,t){return me(e,t)<0?t:e}function xe(e,t){return me(e,t)<0?e:t}function Ce(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function Se(e,t){if(t.line<e.first)return ve(e.first,0);var r=e.first+e.size-1;return t.line>r?ve(r,ae(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?ve(e.line,t):r<0?ve(e.line,0):e}(t,ae(e,t.line).text.length)}function Le(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=Se(e,t[n]);return r}var ke=!1,Te=!1;function Me(e,t,r){this.marker=e,this.from=t,this.to=r}function Ne(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function Oe(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function Ae(e,t){if(t.full)return null;var r=pe(e,t.from.line)&&ae(e,t.from.line).markedSpans,n=pe(e,t.to.line)&&ae(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==me(t.from,t.to),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&"bookmark"==l.type&&(!r||!o.marker.insertLeft)){var s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Me(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Me(l,s?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,l),u=1==t.text.length,c=$(t.text).length+(u?i:0);if(s)for(var h=0;h<s.length;++h){var f=s[h];if(null==f.to){var d=Ne(a,f.marker);d?u&&(f.to=null==d.to?null:d.to+c):f.to=i}}if(a)for(var p=0;p<a.length;++p){var g=a[p];if(null!=g.to&&(g.to+=c),null==g.from)Ne(s,g.marker)||(g.from=c,u&&(s||(s=[])).push(g));else g.from+=c,u&&(s||(s=[])).push(g)}s&&(s=De(s)),a&&a!=s&&(a=De(a));var v=[s];if(!u){var m,y=t.text.length-2;if(y>0&&s)for(var b=0;b<s.length;++b)null==s[b].to&&(m||(m=[])).push(new Me(s[b].marker,null,null));for(var w=0;w<y;++w)v.push(m);v.push(a)}return v}function De(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function We(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function He(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function Fe(e){return e.inclusiveLeft?-1:0}function Pe(e){return e.inclusiveRight?1:0}function Ee(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=me(n.from,i.from)||Fe(e)-Fe(t);if(o)return-o;var l=me(n.to,i.to)||Pe(e)-Pe(t);return l||t.id-e.id}function Ie(e,t){var r,n=Te&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||Ee(r,i.marker)<0)&&(r=i.marker);return r}function ze(e){return Ie(e,!0)}function Re(e){return Ie(e,!1)}function Be(e,t){var r,n=Te&&e.markedSpans;if(n)for(var i=0;i<n.length;++i){var o=n[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!r||Ee(r,o.marker)<0)&&(r=o.marker)}return r}function Ge(e,t,r,n,i){var o=ae(e,t),l=Te&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=me(u.from,r)||Fe(a.marker)-Fe(i),h=me(u.to,n)||Pe(a.marker)-Pe(i);if(!(c>=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?me(u.to,r)>=0:me(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?me(u.from,n)<=0:me(u.from,n)<0)))return!0}}}function Ue(e){for(var t;t=ze(e);)e=t.find(-1,!0).line;return e}function Ve(e,t){var r=ae(e,t),n=Ue(r);return r==n?t:fe(n)}function Ke(e,t){if(t>e.lastLine())return t;var r,n=ae(e,t);if(!je(e,n))return t;for(;r=Re(n);)n=r.find(1,!0).line;return fe(n)+1}function je(e,t){var r=Te&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&Xe(e,t,n))return!0}}function Xe(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return Xe(e,n.line,Ne(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&Xe(e,t,i))return!0}function Ye(e){for(var t=0,r=(e=Ue(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;o=(r=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function _e(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ze(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=Re(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function $e(e){var t=e.display,r=e.doc;t.maxLine=ae(r,r.first),t.maxLineLength=_e(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=_e(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var qe=null;function Ze(e,t,r){var n;qe=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:qe=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:qe=i)}return null!=n?n:qe}var Qe=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c="ltr"==u?"L":"R";if(0==a.length||"ltr"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p<f;++p)d.push((h=a.charCodeAt(p))<=247?e.charAt(h):1424<=h&&h<=1524?"R":1536<=h&&h<=1785?t.charAt(h-1536):1774<=h&&h<=2220?"r":8192<=h&&h<=8203?"w":8204==h?"b":"L");for(var g=0,v=c;g<f;++g){var m=d[g];"m"==m?d[g]=v:v=m}for(var y=0,b=c;y<f;++y){var w=d[y];"1"==w&&"r"==b?d[y]="n":i.test(w)&&(b=w,"r"==w&&(d[y]="R"))}for(var x=1,C=d[0];x<f-1;++x){var S=d[x];"+"==S&&"1"==C&&"1"==d[x+1]?d[x]="1":","!=S||C!=d[x+1]||"1"!=C&&"n"!=C||(d[x]=C),C=S}for(var L=0;L<f;++L){var k=d[L];if(","==k)d[L]="N";else if("%"==k){var T=void 0;for(T=L+1;T<f&&"%"==d[T];++T);for(var M=L&&"!"==d[L-1]||T<f&&"1"==d[T]?"1":"N",N=L;N<T;++N)d[N]=M;L=T-1}}for(var O=0,A=c;O<f;++O){var D=d[O];"L"==A&&"1"==D?d[O]="L":i.test(D)&&(A=D)}for(var W=0;W<f;++W)if(n.test(d[W])){var H=void 0;for(H=W+1;H<f&&n.test(d[H]);++H);for(var F="L"==(W?d[W-1]:c),P=F==("L"==(H<f?d[H]:c))?F?"L":"R":c,E=W;E<H;++E)d[E]=P;W=H-1}for(var I,z=[],R=0;R<f;)if(o.test(d[R])){var B=R;for(++R;R<f&&o.test(d[R]);++R);z.push(new s(0,B,R))}else{var G=R,U=z.length;for(++R;R<f&&"L"!=d[R];++R);for(var V=G;V<R;)if(l.test(d[V])){G<V&&z.splice(U,0,new s(1,G,V));var K=V;for(++V;V<R&&l.test(d[V]);++V);z.splice(U,0,new s(2,K,V)),G=V}else++V;G<R&&z.splice(U,0,new s(1,G,R))}return"ltr"==u&&(1==z[0].level&&(I=a.match(/^\s+/))&&(z[0].from=I[0].length,z.unshift(new s(0,0,I[0].length))),1==$(z).level&&(I=a.match(/\s+$/))&&($(z).to-=I[0].length,z.push(new s(0,f-I[0].length,f)))),"rtl"==u?z.reverse():z}}();function Je(e,t){var r=e.order;return null==r&&(r=e.order=Qe(e.text,t)),r}var et=[],tt=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||et).concat(r)}};function rt(e,t){return e._handlers&&e._handlers[t]||et}function nt(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=B(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function it(e,t){var r=rt(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function ot(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),it(e,r||t.type,e,t),ht(t)||t.codemirrorIgnore}function lt(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==B(r,t[n])&&r.push(t[n])}function st(e,t){return rt(e,t).length>0}function at(e){e.prototype.on=function(e,t){tt(this,e,t)},e.prototype.off=function(e,t){nt(this,e,t)}}function ut(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ct(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ht(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ft(e){ut(e),ct(e)}function dt(e){return e.target||e.srcElement}function pt(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var gt,vt,mt=function(){if(l&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function yt(e){if(null==gt){var t=O("span","​");N(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(gt=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=gt?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function bt(e){if(null!=vt)return vt;var t=N(e,document.createTextNode("AخA")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(vt=n.right-r.right<3)}var wt,xt=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},Ct=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(wt){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(wt){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},St="oncopy"in(wt=O("div"))||(wt.setAttribute("oncopy","return;"),"function"==typeof wt.oncopy),Lt=null;var kt={},Tt={};function Mt(e){if("string"==typeof e&&Tt.hasOwnProperty(e))e=Tt[e];else if(e&&"string"==typeof e.name&&Tt.hasOwnProperty(e.name)){var t=Tt[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Mt("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Mt("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Nt(e,t){t=Mt(t);var r=kt[t.name];if(!r)return Nt(e,"text/plain");var n=r(e,t);if(Ot.hasOwnProperty(t.name)){var i=Ot[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Ot={};function At(e,t){I(t,Ot.hasOwnProperty(e)?Ot[e]:Ot[e]={})}function Dt(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Wt(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ht(e,t,r){return!e.startState||e.startState(t,r)}var Ft=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Ft.prototype.eol=function(){return this.pos>=this.string.length},Ft.prototype.sol=function(){return this.pos==this.lineStart},Ft.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ft.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Ft.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Ft.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Ft.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ft.prototype.skipToEnd=function(){this.pos=this.string.length},Ft.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ft.prototype.backUp=function(e){this.pos-=e},Ft.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=z(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?z(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.indentation=function(){return z(this.string,null,this.tabSize)-(this.lineStart?z(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ft.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ft.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ft.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ft.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Pt=function(e,t){this.state=e,this.lookAhead=t},Et=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function It(e,t,r,n){var i=[e.state.modeGen],o={};Xt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,Xt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+" ":"")+"overlay "+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1},a=0;a<e.state.overlays.length;++a)s(a);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function zt(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=Rt(e,fe(t)),i=t.text.length>e.options.maxHighlightLength&&Dt(e.doc.mode,n.state),o=It(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Rt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new Et(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=ae(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof Pt?u.lookAhead:0)<=o.modeFrontier))return s;var c=z(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&ae(n,o-1).stateAfter,s=l?Et.fromSaved(n,l,o):new Et(n,Ht(n.mode),o);return n.iter(o,t,function(r){Bt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function Bt(e,t,r,n){var i=e.doc.mode,o=new Ft(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Gt(i,r.state);!o.eol();)Ut(i,o,r.state),o.start=o.pos}function Gt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Wt(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Ut(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Wt(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}Et.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Et.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Et.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Et.fromSaved=function(e,t,r){return t instanceof Pt?new Et(e,Dt(e.mode,t.state),r,t.lookAhead):new Et(e,Dt(e.mode,t),r)},Et.prototype.save=function(e){var t=!1!==e?Dt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Pt(t,this.maxLookAhead):t};var Vt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function Kt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=ae(l,(t=Se(l,t)).line),u=Rt(e,t.line,r),c=new Ft(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Ut(s,c,u.state),n&&o.push(new Vt(c,i,Dt(l.mode,u.state)));return n?o:new Vt(c,i,u.state)}function jt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function Xt(e,t,r,n,i,o,l){var s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,h=new Ft(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(""==t&&jt(Gt(r,n.state),o);!h.eol();){if(h.pos>e.options.maxHighlightLength?(s=!1,l&&Bt(e,t,n,h.pos),h.pos=t.length,a=null):a=jt(Ut(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u<h.start;)i(u=Math.min(h.start,u+5e3),c);c=a}h.start=h.pos}for(;u<h.pos;){var p=Math.min(h.pos,u+5e3);i(p,c),u=p}}var Yt=function(e,t,r){this.text=e,He(this,t),this.height=r?r(this):1};function _t(e){e.parent=null,We(e)}Yt.prototype.lineNo=function(){return fe(this)},at(Yt);var $t={},qt={};function Zt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?qt:$t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Qt(e,t){var r=A("span",null,null,a?"padding-right: .1px":null),n={pre:A("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=er,bt(e.display.measure)&&(l=Je(o,e.doc.direction))&&(n.addToken=tr(n.addToken,l)),n.map=[],nr(o,n,zt(e,o,t!=e.display.externalMeasured&&fe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(yt(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return it(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Jt(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function er(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}(t,e.trailingSpace):t,h=e.cm.state.specialChars,f=!1;if(h.test(t)){u=document.createDocumentFragment();for(var d=0;;){h.lastIndex=d;var p=h.exec(t),g=p?p.index-d:t.length-d;if(g){var v=document.createTextNode(c.slice(d,d+g));l&&s<9?u.appendChild(O("span",[v])):u.appendChild(v),e.map.push(e.pos,e.pos+g,v),e.col+=g,e.pos+=g}if(!p)break;d+=g+1;var m=void 0;if("\t"==p[0]){var y=e.cm.options.tabSize,b=y-e.col%y;(m=u.appendChild(O("span",_(b),"cm-tab"))).setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=b}else"\r"==p[0]||"\n"==p[0]?((m=u.appendChild(O("span","\r"==p[0]?"␍":"␤","cm-invalidchar"))).setAttribute("cm-text",p[0]),e.col+=1):((m=e.cm.options.specialCharPlaceholder(p[0])).setAttribute("cm-text",p[0]),l&&s<9?u.appendChild(O("span",[m])):u.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,u=document.createTextNode(c),e.map.push(e.pos,e.pos+t.length,u),l&&s<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==c.charCodeAt(t.length-1),r||n||i||f||o){var w=r||"";n&&(w+=n),i&&(w+=i);var x=O("span",[u],w,o);if(a)for(var C in a)a.hasOwnProperty(C)&&"style"!=C&&"class"!=C&&x.setAttribute(C,a[C]);return e.content.appendChild(x)}e.content.appendChild(u)}}function tr(e,t){return function(r,n,i,o,l,s,a){i=i?i+" cm-force-border":"cm-force-border";for(var u=r.pos,c=u+n.length;;){for(var h=void 0,f=0;f<t.length&&!((h=t[f]).to>u&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function rr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function nr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;if("bookmark"==C.type&&x.from==p&&C.widgetNode)y.push(C);else if(x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Ee(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L<b.length;L+=2)b[L+1]==m&&(u+=" "+b[L]);if(!h||h.from==p)for(var k=0;k<y.length;++k)rr(t,0,y[k]);if(h&&(h.from||0)==p){if(rr(t,(null==h.to?d+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(p>=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=Zt(r[g++],t.cm.options)}}else for(var O=1;O<r.length;O+=2)t.addToken(t,i.slice(o,o=r[O]),Zt(r[O+1],t.cm.options))}function ir(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=Re(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?fe($(this.rest))-r+1:1,this.node=this.text=null,this.hidden=je(e,t)}function or(e,t,r){for(var n,i=[],o=t;o<r;o=n){var l=new ir(e.doc,ae(e.doc,o),o);n=o+l.size,i.push(l)}return i}var lr=null;var sr=null;function ar(e,t){var r=rt(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);lr?n=lr.delayedCallbacks:sr?n=sr:(n=sr=[],setTimeout(ur,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},l=0;l<r.length;++l)o(l)}}function ur(){var e=sr;sr=null;for(var t=0;t<e.length;++t)e[t]()}function cr(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?dr(e,t):"gutter"==o?gr(e,t,r,n):"class"==o?pr(e,t):"widget"==o&&vr(e,t,n)}t.changes=null}function hr(e){return e.node==e.text&&(e.node=O("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),l&&s<8&&(e.node.style.zIndex=2)),e.node}function fr(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):Qt(e,t)}function dr(e,t){var r=t.text.className,n=fr(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,pr(e,t)):r&&(t.text.className=r)}function pr(e,t){!function(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var n=hr(t);t.background=n.insertBefore(O("div",null,r),n.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?hr(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function gr(e,t,r,n){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=hr(t);t.gutterBackground=O("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px; width: "+n.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var l=hr(t),s=t.gutter=O("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),l.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(O("div",ge(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+n.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var a=0;a<e.options.gutters.length;++a){var u=e.options.gutters[a],c=o.hasOwnProperty(u)&&o[u];c&&s.appendChild(O("div",[c],"CodeMirror-gutter-elt","left: "+n.gutterLeft[u]+"px; width: "+n.gutterWidth[u]+"px"))}}}function vr(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);yr(e,t,r)}function mr(e,t,r,n){var i=fr(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),pr(e,t),gr(e,t,r,n),yr(e,t,n),t.node}function yr(e,t,r){if(br(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)br(e,t.rest[n],t,r,!1)}function br(e,t,r,n,i){if(t.widgets)for(var o=hr(r),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=O("div",[a.node],"CodeMirror-linewidget");a.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),wr(a,u,r,n),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,r.gutter||r.text):o.appendChild(u),ar(a,"redraw")}}function wr(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function xr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!D(document.body,e.node)){var r="position: relative;";e.coverGutter&&(r+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(r+="width: "+t.display.wrapper.clientWidth+"px;"),N(t.display.measure,O("div",[e.node],null,r))}return e.height=e.node.parentNode.offsetHeight}function Cr(e,t){for(var r=dt(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function Sr(e){return e.lineSpace.offsetTop}function Lr(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function kr(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=N(e.measure,O("pre","x")),r=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,n={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(n.left)||isNaN(n.right)||(e.cachedPaddingH=n),n}function Tr(e){return G-e.display.nativeBarWidth}function Mr(e){return e.display.scroller.clientWidth-Tr(e)-e.display.barWidth}function Nr(e){return e.display.scroller.clientHeight-Tr(e)-e.display.barHeight}function Or(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(fe(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Ar(e,t,r,n){return Hr(e,Wr(e,t),r,n)}function Dr(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[un(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Wr(e,t){var r=fe(t),n=Dr(e,r);n&&!n.text?n=null:n&&n.changes&&(cr(e,n,r,nn(e)),e.curOp.forceUpdate=!0),n||(n=function(e,t){var r=fe(t=Ue(t)),n=e.display.externalMeasured=new ir(e.doc,t,r);n.lineN=r;var i=n.built=Qt(e,n);return n.text=i.pre,N(e.display.lineMeasure,i.pre),n}(e,t));var i=Or(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Hr(e,t,r,n,i){t.before&&(r=-1);var o,a=r+(n||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&Mr(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Er(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c<o.coverEnd&&ie(t.line.text.charAt(o.coverStart+c));)++c;if((i=l&&s<9&&0==u&&c==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Ir(k(a,u,c).getClientRects(),n)).left||i.right||0==u)break;c=u,u-=1,h="right"}l&&s<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Lt)return Lt;var t=N(e,O("span","x")),r=t.getBoundingClientRect(),n=k(t,0,1).getBoundingClientRect();return Lt=Math.abs(r.left-n.left)>1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+rn(e.display),top:p.top,bottom:p.bottom}:Pr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(m<y[b]);b++);var w=b?y[b-1]:0,x=y[b],C={left:("right"==h?i.right:i.left)-t.rect.left,right:("left"==h?i.left:i.right)-t.rect.left,top:w,bottom:x};i.left||i.right||(C.bogus=!0);e.options.singleCursorHeightPerLine||(C.rtop=g,C.rbottom=v);return C}(e,t,r,n)).bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Fr,Pr={left:0,right:0,top:0,bottom:0};function Er(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l="right";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Ir(e,t){var r=Pr;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function zr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Rr(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)zr(e.display.view[t])}function Br(e){Rr(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Gr(){return c&&v?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Ur(){return c&&v?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Vr(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=xr(e.widgets[r]));return t}function Kr(e,t,r,n,i){if(!i){var o=Vr(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var l=Ye(t);if("local"==n?l+=Sr(e.display):l-=e.display.viewOffset,"page"==n||"window"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+("window"==n?0:Ur());var a=s.left+("window"==n?0:Gr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function jr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=Gr(),i-=Ur();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function Xr(e,t,r,n,i){return n||(n=ae(e.doc,t.line)),Kr(e,n,Ar(e,n,t.ch,i),r)}function Yr(e,t,r,n,i,o){function l(t,l){var s=Hr(e,i,t,l?"right":"left",o);return l?s.left=s.right:s.right=s.left,Kr(e,n,s,r)}n=n||ae(e.doc,t.line),i||(i=Wr(e,n));var s=Je(n,e.doc.direction),a=t.ch,u=t.sticky;if(a>=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=Ze(s,a,u),f=qe,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function _r(e,t){var r=0;t=Se(e.doc,t),e.options.lineWrapping||(r=rn(e.display)*t.ch);var n=ae(e.doc,t.line),i=Ye(n)+Sr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function $r(e,t,r,n,i){var o=ve(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function qr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return $r(n.first,0,null,!0,-1);var i=de(n,r),o=n.first+n.size-1;if(i>o)return $r(n.first+n.size-1,ae(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=ae(n,i);;){var s=en(e,l,i,t,r),a=Be(l,s.ch+(s.xRel>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=ae(n,i=u.line)}}function Zr(e,t,r,n){n-=Vr(t);var i=t.text.length,o=le(function(t){return Hr(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Hr(e,r,t).top>n},o,i)}}function Qr(e,t,r,n){return r||(r=Wr(e,t)),Zr(e,t,r,Kr(e,t,Hr(e,r,n),"line").top)}function Jr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function en(e,t,r,n,i){i-=Ye(t);var o=Wr(e,t),l=Vr(t),s=0,a=t.text.length,u=!0,c=Je(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=Zr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f<i.length;f++){var d=i[f];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=Hr(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||h>v)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.from<a&&(c={from:a,to:c.to,level:c.level});c.to>u&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return Jr(Yr(e,ve(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Yr(e,ve(r,u?a.from:a.to,u?"after":"before"),"line",t,n);Jr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Hr(e,o,t);return r.top+=l,r.bottom+=l,!!Jr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?"after":"before",f=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?"after":v==t.text.length?"before":Hr(e,o,v-(u?1:0)).bottom+l<=i==u?"after":"before";var w=Yr(e,ve(r,v,d),"line",t,o);f=w.left,m=i<w.top||i>=w.bottom}return $r(r,v=oe(t.text,v,1),d,m,n-f)}function tn(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Fr){Fr=O("pre");for(var t=0;t<49;++t)Fr.appendChild(document.createTextNode("x")),Fr.appendChild(O("br"));Fr.appendChild(document.createTextNode("x"))}N(e.measure,Fr);var r=Fr.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function rn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),r=O("pre",[t]);N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function nn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:on(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function on(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ln(e){var t=tn(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/rn(e.display)-3);return function(i){if(je(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function sn(e){var t=e.doc,r=ln(e);t.iter(function(e){var t=r(e);t!=e.height&&he(e,t)})}function an(e,t,r,n){var i=e.display;if(!r&&"true"==dt(t).getAttribute("cm-not-content"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=qr(e,o,l);if(n&&1==u.xRel&&(a=ae(e.doc,u.line).text).length==u.ch){var c=z(a,a.length,e.options.tabSize)-a.length;u=ve(u.line,Math.max(0,Math.round((o-kr(e.display).left)/rn(e.display))-c))}return u}function un(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function cn(e){e.display.input.showSelection(e.display.input.prepareSelection())}function hn(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&fn(e,s.head,i),a||pn(e,s,o)}}return n}function fn(e,t,r){var n=Yr(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=r.appendChild(O("div"," ","CodeMirror-cursor"));if(i.style.left=n.left+"px",i.style.top=n.top+"px",i.style.height=Math.max(0,n.bottom-n.top)*e.options.cursorHeight+"px",n.other){var o=r.appendChild(O("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=n.other.left+"px",o.style.top=n.other.top+"px",o.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function dn(e,t){return e.top-t.top||e.left-t.left}function pn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),l=kr(e.display),s=l.left,a=Math.max(n.sizerWidth,Mr(e)-n.sizer.offsetLeft)-l.right,u="ltr"==i.direction;function c(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(O("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?a-e:r)+"px;\n height: "+(n-t)+"px"))}function h(t,r,n){var o,l,h=ae(i,t),f=h.text.length;function d(r,n){return Xr(e,ve(t,r),"div",h,n)}function p(t,r,n){var i=Qr(e,h,null,t),o="ltr"==r==("after"==n)?"left":"right";return d("after"==n?i.begin:i.end-(/\s/.test(h.text.charAt(i.end-1))?2:1),o)[o]}var g=Je(h,i.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom<y.top&&c(s,m.bottom,null,y.top),c(N,y.top,O-N,y.bottom)}(!o||dn(m,o)<0)&&(o=m),dn(y,o)<0&&(o=y),(!l||dn(m,l)<0)&&(l=m),dn(y,l)<0&&(l=y)}),{start:o,end:l}}var f=t.from(),d=t.to();if(f.line==d.line)h(f.line,f.ch,d.ch);else{var p=ae(i,f.line),g=ae(i,d.line),v=Ue(p)==Ue(g),m=h(f.line,f.ch,v?p.text.length+1:null).end,y=h(d.line,v?0:null,d.ch).start;v&&(m.top<y.top-2?(c(m.right,m.top,null,m.bottom),c(s,y.top,y.left,y.bottom)):c(m.right,m.top,y.left-m.right,m.bottom)),m.bottom<y.top&&c(s,m.bottom,null,y.top)}r.appendChild(o)}function gn(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function vn(e){e.state.focused||(e.display.input.focus(),yn(e))}function mn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,bn(e))},100)}function yn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,H(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),gn(e))}function bn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function wn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=e.options.lineWrapping,a=void 0,u=0;if(!i.hidden){if(l&&s<8){var c=i.node.offsetTop+i.node.offsetHeight;a=c-r,r=c}else{var h=i.node.getBoundingClientRect();a=h.bottom-h.top,!o&&i.text.firstChild&&(u=i.text.firstChild.getBoundingClientRect().right-h.left-1)}var f=i.line.height-a;if(a<2&&(a=tn(t)),(f>.005||f<-.005)&&(he(i.line,a),xn(i.line),i.rest))for(var d=0;d<i.rest.length;d++)xn(i.rest[d]);if(u>e.display.sizerWidth){var p=Math.ceil(u/rn(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function xn(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function Cn(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-Sr(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=de(t,n),l=de(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=de(t,Ye(ae(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=de(t,Ye(ae(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Sn(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=on(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function Ln(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=ge(e.options,t.first+t.size-1),n=e.display;if(r.length!=n.lineNumChars){var i=n.measure.appendChild(O("div",[O("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,l=i.offsetWidth-o;return n.lineGutter.style.width="",n.lineNumInnerWidth=Math.max(o,n.lineGutter.offsetWidth-l)+1,n.lineNumWidth=n.lineNumInnerWidth+l,n.lineNumChars=n.lineNumInnerWidth?r.length:-1,n.lineGutter.style.width=n.lineNumWidth+"px",ui(e),!0}return!1}function kn(e,t){var r=e.display,n=tn(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Nr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Lr(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Mr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.left<h?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>f+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Tn(e,t){null!=t&&(On(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Mn(e){On(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Nn(e,t,r){null==t&&null==r||On(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function On(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,An(e,_r(e,t.from),_r(e,t.to),t.margin))}function An(e,t,r,n){var i=kn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Nn(e,i.scrollLeft,i.scrollTop)}function Dn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||ai(e,{top:t}),Wn(e,t,!0),r&&ai(e),ni(e,100))}function Wn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Hn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,Sn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Fn(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Lr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Tr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var Pn=function(e,t,r){this.cm=r;var n=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),tt(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),tt(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Pn.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},Pn.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Pn.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Pn.prototype.zeroWidthHack=function(){var e=y&&!d?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new R,this.disableVert=new R},Pn.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents="auto",t.set(1e3,function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)})},Pn.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var En=function(){};function In(e,t){t||(t=Fn(e));var r=e.display.barWidth,n=e.display.barHeight;zn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&wn(e),zn(e,Fn(e)),r=e.display.barWidth,n=e.display.barHeight}function zn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}En.prototype.update=function(){return{bottom:0,right:0}},En.prototype.setScrollLeft=function(){},En.prototype.setScrollTop=function(){},En.prototype.clear=function(){};var Rn={native:Pn,null:En};function Bn(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Rn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),tt(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Hn(e,t):Dn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var Gn=0;function Un(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Gn},t=e.curOp,lr?lr.ops.push(t):t.ownsGroup=lr={ops:[t],delayedCallbacks:[]}}function Vn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{lr=null,t(r)}}(t,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)Kn(t[r]);for(var n=0;n<t.length;n++)(i=t[n]).updatedDisplay=i.mustUpdate&&li(i.cm,i.update);var i;for(var o=0;o<t.length;o++)jn(t[o]);for(var l=0;l<t.length;l++)Xn(t[l]);for(var s=0;s<t.length;s++)Yn(t[s])}(e)})}function Kn(e){var t=e.cm,r=t.display;!function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=Tr(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=Tr(e)+"px",t.scrollbarsClipped=!0)}(t),e.updateMaxLine&&$e(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<r.viewFrom||e.scrollToPos.to.line>=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new oi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function jn(e){var t=e.cm,r=t.display;e.updatedDisplay&&wn(t),e.barMeasure=Fn(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Ar(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Tr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Mr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function Xn(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Hn(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==W();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&In(t,e.barMeasure),e.updatedDisplay&&ci(t,e.barMeasure),e.selectionChanged&&gn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&vn(e.cm)}function Yn(e){var t=e.cm,r=t.display,n=t.doc;(e.updatedDisplay&&si(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&Wn(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Hn(t,e.scrollLeft,!0,!0),e.scrollToPos)&&function(e,t){if(!ot(e,"scrollCursorIntoView")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null;if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Sr(e.display))+"px;\n height: "+(t.bottom-t.top+Tr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?ve(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?ve(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var l=!1,s=Yr(e,t),a=r&&r!=t?Yr(e,r):s,u=kn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Dn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Hn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,Se(n,e.scrollToPos.from),Se(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||it(i[l],"hide");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&it(o[s],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&it(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function _n(e,t){if(e.curOp)return t();Un(e);try{return t()}finally{Vn(e)}}function $n(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Un(e);try{return t.apply(e,arguments)}finally{Vn(e)}}}function qn(e){return function(){if(this.curOp)return e.apply(this,arguments);Un(this);try{return e.apply(this,arguments)}finally{Vn(this)}}}function Zn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);Un(t);try{return e.apply(this,arguments)}finally{Vn(t)}}}function Qn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Te&&Ve(e.doc,t)<i.viewTo&&ei(e);else if(r<=i.viewFrom)Te&&Ke(e.doc,r+n)>i.viewFrom?ei(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)ei(e);else if(t<=i.viewFrom){var o=ti(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):ei(e)}else if(r>=i.viewTo){var l=ti(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):ei(e)}else{var s=ti(e,t,t,-1),a=ti(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(or(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):ei(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function Jn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[un(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function ei(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function ti(e,t,r,n){var i,o=un(e,t),l=e.display.view;if(!Te||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Ve(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function ri(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function ni(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,E(ii,e))}function ii(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=Rt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Dt(t.mode,n.state):null,a=It(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&f<l.length;++f)h=l[f]!=o.styles[f];h&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&Bt(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return ni(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&_n(e,function(){for(var t=0;t<i.length;t++)Jn(e,i[t],"text")})}}var oi=function(e,t,r){var n=e.display;this.viewport=t,this.visible=Cn(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Mr(e),this.force=r,this.dims=nn(e),this.events=[]};function li(e,t){var r=e.display,n=e.doc;if(t.editorIsHidden)return ei(e),!1;if(!t.force&&t.visible.from>=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==ri(e))return!1;Ln(e)&&(ei(e),t.dims=nn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFrom<o&&o-r.viewFrom<20&&(o=Math.max(n.first,r.viewFrom)),r.viewTo>l&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),Te&&(o=Ve(e.doc,o),l=Ke(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=or(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=or(e,t,n.viewFrom).concat(n.view):n.viewFrom<t&&(n.view=n.view.slice(un(e,t))),n.viewFrom=t,n.viewTo<r?n.view=n.view.concat(or(e,n.viewTo,r)):n.viewTo>r&&(n.view=n.view.slice(0,un(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Ye(ae(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=ri(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h<u.length;h++){var f=u[h];if(f.hidden);else if(f.node&&f.node.parentNode==o){for(;l!=f.node;)l=s(l);var d=i&&null!=t&&t<=c&&f.lineNumber;f.changes&&(B(f.changes,"gutter")>-1&&(d=!1),cr(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(ge(e.options,c)))),l=f.node.nextSibling}else{var p=mr(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(c),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ni(e,400)),r.updateLineNumbers=null,!0}function si(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Mr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Lr(e.display)-Nr(e),r.top)}),t.visible=Cn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&li(e,t);n=!1){wn(e);var i=Fn(e);cn(e),In(e,i),ci(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ai(e,t){var r=new oi(e,t);if(li(e,r)){wn(e),si(e,r);var n=Fn(e);cn(e),In(e,n),ci(e,n),r.finish()}}function ui(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function ci(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Tr(e)+"px"}function hi(e){var t=e.display.gutters,r=e.options.gutters;M(t);for(var n=0;n<r.length;++n){var i=r[n],o=t.appendChild(O("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=n?"":"none",ui(e)}function fi(e){var t=B(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}oi.prototype.signal=function(e,t){st(e,t)&&this.events.push(arguments)},oi.prototype.finish=function(){for(var e=0;e<this.events.length;e++)it.apply(null,this.events[e])};var di=0,pi=null;function gi(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function vi(e){var t=gi(e);return t.x*=pi,t.y*=pi,t}function mi(e,t){var n=gi(t),i=n.x,o=n.y,l=e.display,s=l.scroller,u=s.scrollWidth>s.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p<d.length;p++)if(d[p].node==f){e.display.currentWheelTarget=f;break e}if(i&&!r&&!h&&null!=pi)return o&&c&&Dn(e,Math.max(0,s.scrollTop+o*pi)),Hn(e,Math.max(0,s.scrollLeft+i*pi)),(!o||o&&c)&&ut(t),void(l.wheelStartX=null);if(o&&null!=pi){var g=o*pi,v=e.doc.scrollTop,m=v+l.wrapper.clientHeight;g<0?v=Math.max(0,v+g-50):m=Math.min(e.doc.height,m+g+50),ai(e,{top:v,bottom:m})}di<20&&(null==l.wheelStartX?(l.wheelStartX=s.scrollLeft,l.wheelStartY=s.scrollTop,l.wheelDX=i,l.wheelDY=o,setTimeout(function(){if(null!=l.wheelStartX){var e=s.scrollLeft-l.wheelStartX,t=s.scrollTop-l.wheelStartY,r=t&&l.wheelDY&&t/l.wheelDY||e&&l.wheelDX&&e/l.wheelDX;l.wheelStartX=l.wheelStartY=null,r&&(pi=(pi*di+r)/(di+1),++di)}},200)):(l.wheelDX+=i,l.wheelDY+=o))}}l?pi=-.53:r?pi=15:c?pi=-.7:f&&(pi=-1/3);var yi=function(e,t){this.ranges=e,this.primIndex=t};yi.prototype.primary=function(){return this.ranges[this.primIndex]},yi.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!ye(r.anchor,n.anchor)||!ye(r.head,n.head))return!1}return!0},yi.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new bi(be(this.ranges[t].anchor),be(this.ranges[t].head));return new yi(e,this.primIndex)},yi.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},yi.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(me(t,n.from())>=0&&me(e,n.to())<=0)return r}return-1};var bi=function(e,t){this.anchor=e,this.head=t};function wi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort(function(e,t){return me(e.from(),t.from())}),r=B(t,i);for(var o=1;o<t.length;o++){var l=t[o],s=t[o-1],a=me(s.to(),l.from());if(n&&!l.empty()?a>0:a>=0){var u=xe(s.from(),l.from()),c=we(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new bi(h?c:u,h?u:c))}}return new yi(t,r)}function xi(e,t){return new yi([new bi(e,t||e)],0)}function Ci(e){return e.text?ve(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Si(e,t){if(me(e,t.from)<0)return e;if(me(e,t.to)<=0)return Ci(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Ci(t).ch-t.to.ch),ve(r,n)}function Li(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new bi(Si(i.anchor,t),Si(i.head,t)))}return wi(e.cm,r,e.sel.primIndex)}function ki(e,t,r){return e.line==t.line?ve(r.line,e.ch-t.ch+r.ch):ve(r.line+(e.line-t.line),e.ch)}function Ti(e){e.doc.mode=Nt(e.options,e.doc.modeOption),Mi(e)}function Mi(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,ni(e,100),e.state.modeGen++,e.curOp&&Qn(e)}function Ni(e,t){return 0==t.from.ch&&0==t.to.ch&&""==$(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Oi(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),We(e),He(e,r);var i=n?n(e):1;i!=e.height&&he(e,i)}(e,r,i,n),ar(e,"change",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new Yt(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=ae(e,s.line),h=ae(e,a.line),f=$(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(Ni(e,t)){var g=l(0,u.length-1);o(h,h.text,d),p&&e.remove(s.line,p),g.length&&e.insert(s.line,g)}else if(c==h)if(1==u.length)o(c,c.text.slice(0,s.ch)+f+c.text.slice(a.ch),d);else{var v=l(1,u.length-1);v.push(new Yt(f+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,v)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+h.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(h,f+h.text.slice(a.ch),d);var m=l(1,u.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}ar(e,"change",e,t)}function Ai(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;l<n.linked.length;++l){var s=n.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),e(s.doc,n,a))}}}(e,null,!0)}function Di(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,sn(e),Ti(e),Wi(e),e.options.lineWrapping||$e(e),e.options.mode=t.modeOption,Qn(e)}function Wi(e){("rtl"==e.doc.direction?H:T)(e.display.lineDiv,"CodeMirror-rtl")}function Hi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Fi(e,t){var r={from:be(t.from),to:Ci(t),text:ue(e,t.from,t.to)};return Ri(e,r,t.from.line,t.to.line+1),Ai(e,function(e){return Ri(e,r,t.from.line,t.to.line+1)},!0),r}function Pi(e){for(;e.length;){if(!$(e).ranges)break;e.pop()}}function Ei(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&i.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Pi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==n)))l=$(o.changes),0==me(t.from,t.to)&&0==me(t.from,l.to)?l.to=Ci(t):o.changes.push(Fi(e,t));else{var a=$(i.done);for(a&&a.ranges||zi(e.sel,i.done),o={changes:[Fi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||it(e,"historyAdded")}function Ii(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,$(i.done),t))?i.done[i.done.length-1]=t:zi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Pi(i.undone)}function zi(e,t){var r=$(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ri(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function Bi(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function Gi(e,t){var r=function(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(Bi(r[i]));return n}(e,t),n=Ae(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function Ui(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?yi.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var h in u)(c=h.match(/^spans_(\d+)$/))&&B(t,Number(c[1]))>-1&&($(s)[h]=u[h],delete u[h])}}}return n}function Vi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=me(t,i)<0;o!=me(r,i)<0?(i=t,t=r):o!=me(t,r)<0&&(t=r)}return new bi(i,t)}return new bi(r||t,t)}function Ki(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),$i(e,new yi([Vi(e.sel.primary(),t,r,i)],0),n)}function ji(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=Vi(e.sel.ranges[o],t[o],null,i);$i(e,wi(e.cm,n,e.sel.primIndex),r)}function Xi(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,$i(e,wi(e.cm,i,e.sel.primIndex),n)}function Yi(e,t,r,n){$i(e,xi(t,r),n)}function _i(e,t,r){var n=e.history.done,i=$(n);i&&i.ranges?(n[n.length-1]=t,qi(e,t,r)):$i(e,t,r)}function $i(e,t,r){qi(e,t,r),Ii(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function qi(e,t,r){(st(e,"beforeSelectionChange")||e.cm&&st(e.cm,"beforeSelectionChange"))&&(t=function(e,t,r){var n={ranges:t.ranges,update:function(t){this.ranges=[];for(var r=0;r<t.length;r++)this.ranges[r]=new bi(Se(e,t[r].anchor),Se(e,t[r].head))},origin:r&&r.origin};return it(e,"beforeSelectionChange",e,n),e.cm&&it(e.cm,"beforeSelectionChange",e.cm,n),n.ranges!=t.ranges?wi(e.cm,n.ranges,n.ranges.length-1):t}(e,t,r));var n=r&&r.bias||(me(t.primary().head,e.sel.primary().head)<0?-1:1);Zi(e,Ji(e,t,n,!0)),r&&!1===r.scroll||!e.cm||Mn(e.cm)}function Zi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,lt(e.cm)),ar(e,"cursorActivity",e))}function Qi(e){Zi(e,Ji(e,e.sel,null,!1))}function Ji(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=to(e,l.anchor,s&&s.anchor,r,n),u=to(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new bi(a,u))}return i?wi(e.cm,i,t.primIndex):t}function eo(e,t,r,n,i){var o=ae(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(it(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=ro(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=me(u,r))&&(n<0?c<0:c>0))return eo(e,u,t,n,i)}var h=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(h=ro(e,h,n,h.line==t.line?o:null)),h?eo(e,h,t,n,i):null}}return t}function to(e,t,r,n,i){var o=n||1,l=eo(e,t,r,o,i)||!i&&eo(e,t,r,o,!0)||eo(e,t,r,-o,i)||!i&&eo(e,t,r,-o,!0);return l||(e.cantEdit=!0,ve(e.first,0))}function ro(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?Se(e,ve(t.line-1)):null:r>0&&t.ch==(n||ae(e,t.line)).text.length?t.line<e.first+e.size-1?ve(t.line+1,0):null:new ve(t.line,t.ch+r)}function no(e){e.setSelection(ve(e.firstLine(),0),ve(e.lastLine()),V)}function io(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=Se(e,t)),r&&(n.to=Se(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),it(e,"beforeChange",e,n),e.cm&&it(e.cm,"beforeChange",e.cm,n),n.canceled?(e.cm&&(e.cm.curOp.updateInput=2),null):{from:n.from,to:n.to,text:n.text,origin:n.origin}}function oo(e,t,r){if(e.cm){if(!e.cm.curOp)return $n(e.cm,oo)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(st(e,"beforeChange")||e.cm&&st(e.cm,"beforeChange"))||(t=io(e,t,!0))){var n=ke&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=B(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(me(u.to,s.from)<0||me(u.from,s.to)>0)){var c=[a,1],h=me(u.from,s.from),f=me(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)lo(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else lo(e,t)}}function lo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=me(t.from,t.to)){var r=Li(e,t);Ei(e,t,r,e.cm?e.cm.curOp.id:NaN),uo(e,t,r,Ae(e,t));var n=[];Ai(e,function(e,r){r||-1!=B(n,e.history)||(po(e.history,t),n.push(e.history)),uo(e,t,null,Ae(e,t))})}}function so(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u<s.length&&(i=s[u],r?!i.ranges||i.equals(e.sel):i.ranges);u++);if(u!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(!(i=s.pop()).ranges){if(n)return void s.push(i);break}if(zi(i,a),r&&!i.equals(e.sel))return void $i(e,i,{clearRedo:!1});l=i}var c=[];zi(l,a),a.push({changes:c,generation:o.generation}),o.generation=i.generation||++o.maxGeneration;for(var h=st(e,"beforeChange")||e.cm&&st(e.cm,"beforeChange"),f=function(r){var n=i.changes[r];if(n.origin=t,h&&!io(e,n,!1))return s.length=0,{};c.push(Fi(e,n));var o=r?Li(e,n):$(s);uo(e,n,o,Gi(e,n)),!r&&e.cm&&e.cm.scrollIntoView({from:n.from,to:Ci(n)});var l=[];Ai(e,function(e,t){t||-1!=B(l,e.history)||(po(e.history,n),l.push(e.history)),uo(e,n,null,Gi(e,n))})},d=i.changes.length-1;d>=0;--d){var p=f(d);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new yi(q(e.sel.ranges,function(e){return new bi(ve(e.anchor.line+t,e.anchor.ch),ve(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Qn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)Jn(e.cm,n,"gutter")}}function uo(e,t,r,n){if(e.cm&&!e.cm.curOp)return $n(e.cm,uo)(e,t,r,n);if(t.to.line<e.first)ao(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);ao(e,i),t={from:ve(e.first,0),to:ve(t.to.line+i,t.to.ch),text:[$(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ve(o,ae(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ue(e,t.from,t.to),r||(r=Li(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=fe(Ue(ae(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&lt(e);Oi(n,t,r,ln(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=_e(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=ae(e,n).stateAfter;if(i&&(!(i instanceof Pt)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),ni(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?Qn(e):o.line!=l.line||1!=t.text.length||Ni(e.doc,t)?Qn(e,o.line,l.line+1,u):Jn(e,o.line,"text");var c=st(e,"changes"),h=st(e,"change");if(h||c){var f={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};h&&ar(e,"change",e,f),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):Oi(e,t,n),qi(e,r,V)}}function co(e,t,r,n,i){var o;n||(n=r),me(n,r)<0&&(r=(o=[n,r])[0],n=o[1]),"string"==typeof t&&(t=e.splitLines(t)),oo(e,{from:r,to:n,text:t,origin:i})}function ho(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function fo(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)ho(o.ranges[s].anchor,t,r,n),ho(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=ve(u.from.line+n,u.from.ch),u.to=ve(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function po(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;fo(e.done,r,n,i),fo(e.undone,r,n,i)}function go(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=ae(e,Ce(e,t)):i=fe(t),null==i?null:(n(o,i)&&e.cm&&Jn(e.cm,i,r),o)}function vo(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function mo(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}bi.prototype.from=function(){return xe(this.anchor,this.head)},bi.prototype.to=function(){return we(this.anchor,this.head)},bi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},vo.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r=e,n=e+t;r<n;++r){var i=this.lines[r];this.height-=i.height,_t(i),ar(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},mo.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),l=n.height;if(n.removeInner(e,o),this.height-=l-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof vo))){var s=[];this.collapse(s),this.children=[new vo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new vo(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++n,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new mo(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=B(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new mo(e.children);n.parent=e,e.children=[n,t],e=n}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,r))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var yo=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};function bo(e,t,r){Ye(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Tn(e,r)}yo.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=fe(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=xr(this);he(r,Math.max(0,r.height-o)),e&&(_n(e,function(){bo(e,r,-o),Jn(e,n,"widget")}),ar(e,"lineWidgetCleared",e,this,n))}},yo.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=xr(this)-t;i&&(je(this.doc,n)||he(n,n.height+i),r&&_n(r,function(){r.curOp.forceUpdate=!0,bo(r,n,i),ar(r,"lineWidgetChanged",r,e,fe(n))}))},at(yo);var wo=0,xo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++wo};function Co(e,t,r,n,i){if(n&&n.shared)return function(e,t,r,n,i){(n=I(n)).shared=!1;var o=[Co(e,t,r,n,i)],l=o[0],s=n.widgetNode;return Ai(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(Co(e,Se(e,t),Se(e,r),n,i));for(var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=$(o)}),new So(o,l)}(e,t,r,n,i);if(e.cm&&!e.cm.curOp)return $n(e.cm,Co)(e,t,r,n,i);var o=new xo(e,i),l=me(t,r);if(n&&I(n,o,!1),l>0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Ge(e,t.line,t,r,o)||t.line!=r.line&&Ge(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Te=!0}o.addToHistory&&Ei(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){u&&o.collapsed&&!u.options.lineWrapping&&Ue(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&he(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Me(o,a==t.line?t.ch:null,a==r.line?r.ch:null)),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){je(e,t)&&he(t,0)}),o.clearOnEnter&&tt(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(ke=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++wo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)Qn(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)Jn(u,c,"text");o.atomic&&Qi(u.doc),ar(u,"markerAdded",u,o)}return o}xo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Un(e),st(this,"clear")){var r=this.find();r&&ar(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],s=Ne(l.markedSpans,this);e&&!this.collapsed?Jn(e,fe(l),"text"):e&&(null!=s.to&&(i=fe(l)),null!=s.from&&(n=fe(l))),l.markedSpans=Oe(l.markedSpans,s),null==s.from&&this.collapsed&&!je(this.doc,l)&&e&&he(l,tn(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var a=0;a<this.lines.length;++a){var u=Ue(this.lines[a]),c=_e(u);c>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&Qn(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Qi(e.doc)),e&&ar(e,"markerCleared",e,this,n,i),t&&Vn(e),this.parent&&this.parent.clear()}},xo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Ne(o.markedSpans,this);if(null!=l.from&&(r=ve(t?o:fe(o),l.from),-1==e))return r;if(null!=l.to&&(n=ve(t?o:fe(o),l.to),1==e))return n}return r&&{from:r,to:n}},xo.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&_n(n,function(){var i=t.line,o=fe(t.line),l=Dr(n,o);if(l&&(zr(l),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!je(r.doc,i)&&null!=r.height){var s=r.height;r.height=null;var a=xr(r)-s;a&&he(i,i.height+a)}ar(n,"markerChanged",n,e)})},xo.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=B(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},xo.prototype.detachLine=function(e){if(this.lines.splice(B(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},at(xo);var So=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};function Lo(e){return e.findMarks(ve(e.first,0),e.clipPos(ve(e.lastLine())),function(e){return e.parent})}function ko(e){for(var t=function(t){var r=e[t],n=[r.primary.doc];Ai(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==B(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}},r=0;r<e.length;r++)t(r)}So.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();ar(this,"clear")}},So.prototype.find=function(e,t){return this.primary.find(e,t)},at(So);var To=0,Mo=function(e,t,r,n,i){if(!(this instanceof Mo))return new Mo(e,t,r,n,i);null==r&&(r=0),mo.call(this,[new vo([new Yt("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=ve(r,0);this.sel=xi(o),this.history=new Hi(null),this.id=++To,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Oi(this,{from:o,to:o,text:e}),$i(this,xi(o),V)};Mo.prototype=Q(mo.prototype,{constructor:Mo,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ce(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Zn(function(e){var t=ve(this.first,0),r=this.first+this.size-1;oo(this,{from:t,to:ve(r,ae(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Nn(this.cm,0,0),$i(this,xi(t),V)}),replaceRange:function(e,t,r,n){co(this,e,t=Se(this,t),r=r?Se(this,r):t,n)},getRange:function(e,t,r){var n=ue(this,Se(this,e),Se(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(pe(this,e))return ae(this,e)},getLineNumber:function(e){return fe(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=ae(this,e)),Ue(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return Se(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Zn(function(e,t,r){Yi(this,Se(this,"number"==typeof e?ve(e,t||0):e),null,r)}),setSelection:Zn(function(e,t,r){Yi(this,Se(this,e),Se(this,t||e),r)}),extendSelection:Zn(function(e,t,r){Ki(this,Se(this,e),t&&Se(this,t),r)}),extendSelections:Zn(function(e,t){ji(this,Le(this,e),t)}),extendSelectionsBy:Zn(function(e,t){ji(this,Le(this,q(this.sel.ranges,e)),t)}),setSelections:Zn(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new bi(Se(this,e[i].anchor),Se(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),$i(this,wi(this.cm,n,t),r)}}),addSelection:Zn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new bi(Se(this,e),Se(this,t||e))),$i(this,wi(this.cm,n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=ue(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=ue(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:Zn(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];n[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:r}}for(var s=t&&"end"!=t&&function(e,t,r){for(var n=[],i=ve(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=ki(s.from,i,o),u=ki(Ci(s),i,o);if(i=s.to,o=u,"around"==r){var c=e.sel.ranges[l],h=me(c.head,c.anchor)<0;n[l]=new bi(h?u:a,h?a:u)}else n[l]=new bi(a,a)}return new yi(n,e.sel.primIndex)}(this,n,t),a=n.length-1;a>=0;a--)oo(this,n[a]);s?_i(this,s):this.cm&&Mn(this.cm)}),undo:Zn(function(){so(this,"undo")}),redo:Zn(function(){so(this,"redo")}),undoSelection:Zn(function(){so(this,"undo",!0)}),redoSelection:Zn(function(){so(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new Hi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Ui(this.history.done),undone:Ui(this.history.undone)}},setHistory:function(e){var t=this.history=new Hi(this.history.maxGeneration);t.done=Ui(e.done.slice(0),null,!0),t.undone=Ui(e.undone.slice(0),null,!0)},setGutterMarker:Zn(function(e,t,r){return go(this,e,"gutter",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&re(n)&&(e.gutterMarkers=null),!0})}),clearGutter:Zn(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&go(t,r,"gutter",function(){return r.gutterMarkers[e]=null,re(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!pe(this,e))return null;if(t=e,!(e=ae(this,e)))return null}else if(null==(t=fe(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Zn(function(e,t,r){return go(this,e,"gutter"==t?"gutter":"class",function(e){var n="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass";if(e[n]){if(L(r).test(e[n]))return!1;e[n]+=" "+r}else e[n]=r;return!0})}),removeLineClass:Zn(function(e,t,r){return go(this,e,"gutter"==t?"gutter":"class",function(e){var n="text"==t?"textClass":"background"==t?"bgClass":"gutter"==t?"gutterClass":"wrapClass",i=e[n];if(!i)return!1;if(null==r)e[n]=null;else{var o=i.match(L(r));if(!o)return!1;var l=o.index+o[0].length;e[n]=i.slice(0,o.index)+(o.index&&l!=i.length?" ":"")+i.slice(l)||null}return!0})}),addLineWidget:Zn(function(e,t,r){return function(e,t,r,n){var i=new yo(e,r,n),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),go(e,t,"widget",function(t){var r=t.widgets||(t.widgets=[]);if(null==i.insertAt?r.push(i):r.splice(Math.min(r.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!je(e,t)){var n=Ye(t)<e.scrollTop;he(t,t.height+xr(i)),n&&Tn(o,i.height),o.curOp.forceUpdate=!0}return!0}),o&&ar(o,"lineWidgetAdded",o,i,"number"==typeof t?t:fe(t)),i}(this,e,t,r)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return Co(this,Se(this,e),Se(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return Co(this,e=Se(this,e),e,r,"bookmark")},findMarksAt:function(e){var t=[],r=ae(this,(e=Se(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=Se(this,e),t=Se(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s<l.length;s++){var a=l[s];null!=a.to&&i==e.line&&e.ch>=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),Se(this,ve(r,t))},indexFromPos:function(e){var t=(e=Se(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new Mo(ce(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new Mo(ce(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(me(o,l)){var s=Co(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}(n,Lo(this)),n},unlinkDoc:function(e){if(e instanceof Ll&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),ko(Lo(this));break}}if(e.history==this.history){var r=[e.id];Ai(e,function(e){return r.push(e.id)},!0),e.history=new Hi(null),e.history.done=Ui(this.history.done,r),e.history.undone=Ui(this.history.undone,r)}},iterLinkedDocs:function(e){Ai(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):xt(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Zn(function(e){var t;("rtl"!=e&&(e="ltr"),e!=this.direction)&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&_n(t=this.cm,function(){Wi(t),Qn(t)}))})}),Mo.prototype.eachLine=Mo.prototype.iter;var No=0;function Oo(e){var t=this;if(Ao(t),!ot(t,e)&&!Cr(t.display,e)){ut(e),l&&(No=+new Date);var r=an(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),s=0,a=function(e,n){if(!t.options.allowDropFileTypes||-1!=B(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=$n(t,function(){var e=l.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[n]=e,++s==i){var a={from:r=Se(t.doc,r),to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};oo(t.doc,a),_i(t.doc,xi(r,Ci(a)))}}),l.readAsText(e)}},u=0;u<i;++u)a(n[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),qi(t.doc,xi(r,r)),h)for(var f=0;f<h.length;++f)co(t.doc,"",h[f].anchor,h[f].head,"drag");t.replaceSelection(c,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Ao(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Do(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName("CodeMirror"),r=[],n=0;n<t.length;n++){var i=t[n].CodeMirror;i&&r.push(i)}r.length&&r[0].operation(function(){for(var t=0;t<r.length;t++)e(r[t])})}}var Wo=!1;function Ho(){var e;Wo||(tt(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Do(Fo)},100))}),tt(window,"blur",function(){return Do(bn)}),Wo=!0)}function Fo(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var Po={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Eo=0;Eo<10;Eo++)Po[Eo+48]=Po[Eo+96]=String(Eo);for(var Io=65;Io<=90;Io++)Po[Io]=String.fromCharCode(Io);for(var zo=1;zo<=12;zo++)Po[zo+111]=Po[zo+63235]="F"+zo;var Ro={};function Bo(e){var t,r,n,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))r=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);n=!0}}return t&&(e="Alt-"+e),r&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),n&&(e="Shift-"+e),e}function Go(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=q(r.split(" "),Bo),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(" "),l=n):(s=i.slice(0,o+1).join(" "),l="...");var a=t[s];if(a){if(a!=l)throw new Error("Inconsistent bindings for "+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}function Uo(e,t,r,n){var i=(t=Xo(t)).call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Uo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=Uo(e,t.fallthrough[o],r,n);if(l)return l}}}function Vo(e){var t="string"==typeof e?e:Po[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Ko(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(C?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(C?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function jo(e,t){if(h&&34==e.keyCode&&e.char)return!1;var r=Po[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Ko(r,e,t))}function Xo(e){return"string"==typeof e?Ro[e]:e}function Yo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&me(o.from,$(n).to)<=0;){var l=n.pop();if(me(l.from,o.from)<0){o.from=l.from;break}}n.push(o)}_n(e,function(){for(var t=n.length-1;t>=0;t--)co(e.doc,"",n[t].from,n[t].to,"+delete");Mn(e)})}function _o(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function $o(e,t,r){var n=_o(e,t.ch,r);return null==n?null:new ve(t.line,n,r<0?"after":"before")}function qo(e,t,r,n,i){if(e){var o=Je(r,t.doc.direction);if(o){var l,s=i<0?$(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Wr(t,r);l=i<0?r.text.length-1:0;var c=Hr(t,u,l).top;l=le(function(e){return Hr(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=_o(r,l,1))}else l=i<0?s.to:s.from;return new ve(n,l,a)}}return new ve(n,i<0?r.text.length:0,i<0?"before":"after")}Ro.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ro.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ro.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ro.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ro.default=y?Ro.macDefault:Ro.pcDefault;var Zo={selectAll:no,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return Yo(e,function(t){if(t.empty()){var r=ae(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:ve(t.head.line+1,0)}:{from:t.head,to:ve(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return Yo(e,function(t){return{from:ve(t.from().line,0),to:Se(e.doc,ve(t.to().line+1,0))}})},delLineLeft:function(e){return Yo(e,function(e){return{from:ve(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return Yo(e,function(t){var r=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:r},"div"),to:t.from()}})},delWrappedLineRight:function(e){return Yo(e,function(t){var r=e.charCoords(t.head,"div").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ve(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ve(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return Qo(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return Jo(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return function(e,t){var r=ae(e.doc,t),n=function(e){for(var t;t=Re(e);)e=t.find(1,!0).line;return e}(r);n!=r&&(t=fe(n));return qo(!0,e,r,t,-1)}(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div")},j)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:r},"div")},j)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5,n=e.coordsChar({left:0,top:r},"div");return n.ch<e.getLine(n.line).search(/\S/)?Jo(e,t.head):n},j)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),l=z(e.getLine(o.line),o.ch,n);t.push(_(n-l%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return _n(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=ae(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new ve(i.line,i.ch-1)),i.ch>0)i=new ve(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),ve(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=ae(e.doc,i.line-1).text;l&&(i=new ve(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ve(i.line-1,l.length-1),i,"+transpose"))}r.push(new bi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return _n(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);Mn(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Qo(e,t){var r=ae(e.doc,t),n=Ue(r);return n!=r&&(t=fe(n)),qo(!0,e,n,t,1)}function Jo(e,t){var r=Qo(e,t.line),n=ae(e.doc,r.line),i=Je(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return ve(r.line,l?0:o,r.sticky)}return r}function el(e,t,r){if("string"==typeof t&&!(t=Zo[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=U}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}var tl=new R;function rl(e,t,r,n){var i=e.state.keySeq;if(i){if(Vo(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:tl.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),nl(e,i+" "+t,r,n))return!0}return nl(e,t,r,n)}function nl(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=Uo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&Uo(t,e.options.extraKeys,r,e)||Uo(t,e.options.keyMap,r,e)}(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&ar(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(ut(r),gn(e)),!!i}function il(e,t){var r=jo(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?rl(e,"Shift-"+r,t,function(t){return el(e,t,!0)})||rl(e,r,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return el(e,t)}):rl(e,r,t,function(t){return el(e,t)}))}var ol=null;function ll(e){var t=this;if(t.curOp.focus=W(),!ot(t,e)){l&&s<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=il(t,e);h&&(ol=n?r:null,!n&&88==r&&!St&&(y?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||function(e){var t=e.display.lineDiv;function r(e){18!=e.keyCode&&e.altKey||(T(t,"CodeMirror-crosshair"),nt(document,"keyup",r),nt(document,"mouseover",r))}H(t,"CodeMirror-crosshair"),tt(document,"keyup",r),tt(document,"mouseover",r)}(t)}}function sl(e){16==e.keyCode&&(this.doc.sel.shift=!1),ot(this,e)}function al(e){var t=this;if(!(Cr(t.display,e)||ot(t,e)||e.ctrlKey&&!e.altKey||y&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(h&&r==ol)return ol=null,void ut(e);if(!h||e.which&&!(e.which<10)||!il(t,e)){var i=String.fromCharCode(null==n?r:n);"\b"!=i&&(function(e,t,r){return rl(e,"'"+r+"'",t,function(t){return el(e,t,!0)})}(t,e,i)||t.display.input.onKeyPress(e))}}}var ul,cl,hl=function(e,t,r){this.time=e,this.pos=t,this.button=r};function fl(e){var t=this,r=t.display;if(!(ot(t,e)||r.activeTouch&&r.input.supportsTouch()))if(r.input.ensurePolled(),r.shift=e.shiftKey,Cr(r,e))a||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100));else if(!gl(t,e)){var n=an(t,e),i=pt(e),o=n?function(e,t){var r=+new Date;return cl&&cl.compare(r,e,t)?(ul=cl=null,"triple"):ul&&ul.compare(r,e,t)?(cl=new hl(r,e,t),ul=null,"double"):(ul=new hl(r,e,t),cl=null,"single")}(n,i):"single";window.focus(),1==i&&t.state.selectingText&&t.state.selectingText(e),n&&function(e,t,r,n,i){var o="Click";"double"==n?o="Double"+o:"triple"==n&&(o="Triple"+o);return rl(e,Ko(o=(1==t?"Left":2==t?"Middle":"Right")+o,i),i,function(t){if("string"==typeof t&&(t=Zo[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=U}finally{e.state.suppressEdits=!1}return n})}(t,i,n,o,e)||(1==i?n?function(e,t,r,n){l?setTimeout(E(vn,e),0):e.curOp.focus=W();var i,o=function(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=b?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=y?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(y?r.altKey:r.ctrlKey));return i}(e,r,n),u=e.doc.sel;e.options.dragDrop&&mt&&!e.isReadOnly()&&"single"==r&&(i=u.contains(t))>-1&&(me((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(me(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=$n(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,nt(i.wrapper.ownerDocument,"mouseup",u),nt(i.wrapper.ownerDocument,"mousemove",c),nt(i.scroller,"dragstart",h),nt(i.scroller,"drop",u),o||(ut(t),n.addNew||Ki(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();tt(i.wrapper.ownerDocument,"mouseup",u),tt(i.wrapper.ownerDocument,"mousemove",c),tt(i.scroller,"dragstart",h),tt(i.scroller,"drop",u),mn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;ut(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new bi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(l=new bi(r,r)),r=an(e,t,!0,!0),s=-1;else{var c=dl(e,r,n.unit);l=n.extend?Vi(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,$i(o,wi(e,u.concat([l]),s),{scroll:!1,origin:"*mouse"})):u.length>1&&u[s].empty()&&"char"==n.unit&&!n.extend?($i(o,wi(e,u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),a=o.sel):Xi(o,s,l,K):(s=0,$i(o,new yi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=me(h,t))if(h=t,"rectangle"==n.unit){for(var i=[],u=e.options.tabSize,c=z(ae(o,r.line).text,r.ch,u),f=z(ae(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=ae(o,g).text,y=X(m,d,u);d==p?i.push(new bi(ve(g,y),ve(g,y))):m.length>y&&i.push(new bi(ve(g,y),ve(g,X(m,p,u))))}i.length||i.push(new bi(r,r)),$i(o,wi(e,a.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=dl(e,t,n.unit),C=w.anchor;me(x.anchor,C)>0?(b=x.head,C=xe(w.from(),x.anchor)):(b=x.anchor,C=we(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=ae(e.doc,r.line);if(0==me(r,n)&&r.sticky==n.sticky)return t;var o=Je(i);if(!o)return t;var l=Ze(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=Ze(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new bi(new ve(r.line,p,g),n)}(e,new bi(Se(o,C),b)),$i(o,wi(e,S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,ut(t),i.input.focus(),nt(i.wrapper.ownerDocument,"mousemove",v),nt(i.wrapper.ownerDocument,"mouseup",m),o.history.lastSelOrigin=null}var v=$n(e,function(t){0!==t.buttons&&pt(t)?function t(r){var l=++p;var s=an(e,r,!0,"rectangle"==n.unit);if(!s)return;if(0!=me(s,h)){e.curOp.focus=W(),f(s);var a=Cn(i,o);(s.line>=a.to||s.line<a.from)&&setTimeout($n(e,function(){p==l&&t(r)}),150)}else{var u=r.clientY<d.top?-20:r.clientY>d.bottom?20:0;u&&setTimeout($n(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=$n(e,g);e.state.selectingText=m,tt(i.wrapper.ownerDocument,"mousemove",v),tt(i.wrapper.ownerDocument,"mouseup",m)}(e,n,t,o)}(t,n,o,e):dt(e)==r.scroller&&ut(e):2==i?(n&&Ki(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(S?t.display.input.onContextMenu(e):mn(t)))}}function dl(e,t,r){if("char"==r)return new bi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new bi(ve(t.line,0),Se(e.doc,ve(t.line+1,0)));var n=r(e,t);return new bi(n.from,n.to)}function pl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&ut(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!st(e,r))return ht(t);o-=s.top-l.viewOffset;for(var a=0;a<e.options.gutters.length;++a){var u=l.gutters.childNodes[a];if(u&&u.getBoundingClientRect().right>=i)return it(e,r,e,de(e.doc,o),e.options.gutters[a],t),ht(t)}}function gl(e,t){return pl(e,t,"gutterClick",!0)}function vl(e,t){Cr(e.display,t)||function(e,t){if(!st(e,"gutterContextMenu"))return!1;return pl(e,t,"gutterContextMenu",!1)}(e,t)||ot(e,t,"contextmenu")||S||e.display.input.onContextMenu(t)}function ml(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Br(e)}hl.prototype.compare=function(e,t,r){return this.time+400>e&&0==me(t,this.pos)&&r==this.button};var yl={toString:function(){return"CodeMirror.Init"}},bl={},wl={};function xl(e){hi(e),Qn(e),Sn(e)}function Cl(e,t,r){if(!t!=!(r&&r!=yl)){var n=e.display.dragFunctions,i=t?tt:nt;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Sl(e){e.options.lineWrapping?(H(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),$e(e)),sn(e),Qn(e),Br(e),setTimeout(function(){return In(e)},100)}function Ll(e,t){var r=this;if(!(this instanceof Ll))return new Ll(e,t);this.options=t=t?I(t):{},I(bl,t,!1),fi(t);var n=t.value;"string"==typeof n?n=new Mo(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new Ll.inputStyles[t.inputStyle](this),o=this.display=new se(e,n,i);for(var u in o.wrapper.CodeMirror=this,hi(this),ml(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Bn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&o.input.focus(),l&&s<11&&setTimeout(function(){return r.display.input.reset(!0)},20),function(e){var t=e.display;tt(t.scroller,"mousedown",$n(e,fl)),tt(t.scroller,"dblclick",l&&s<11?$n(e,function(t){if(!ot(e,t)){var r=an(e,t);if(r&&!gl(e,t)&&!Cr(e.display,t)){ut(t);var n=e.findWordAt(r);Ki(e.doc,n.anchor,n.head)}}}):function(t){return ot(e,t)||ut(t)});tt(t.scroller,"contextmenu",function(t){return vl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}tt(t.scroller,"touchstart",function(i){if(!ot(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!gl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),tt(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),tt(t.scroller,"touchend",function(r){var n=t.activeTouch;if(n&&!Cr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,"page");l=!n.prev||o(n,n.prev)?new bi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new bi(ve(s.line,0),Se(e.doc,ve(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),ut(r)}i()}),tt(t.scroller,"touchcancel",i),tt(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Dn(e,t.scroller.scrollTop),Hn(e,t.scroller.scrollLeft,!0),it(e,"scroll",e))}),tt(t.scroller,"mousewheel",function(t){return mi(e,t)}),tt(t.scroller,"DOMMouseScroll",function(t){return mi(e,t)}),tt(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ot(e,t)||ft(t)},over:function(t){ot(e,t)||(!function(e,t){var r=an(e,t);if(r){var n=document.createDocumentFragment();fn(e,r,n),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),ft(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-No<100))ft(t);else if(!ot(e,t)&&!Cr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var r=O("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:$n(e,Oo),leave:function(t){ot(e,t)||Ao(e)}};var a=t.input.getField();tt(a,"keyup",function(t){return sl.call(e,t)}),tt(a,"keydown",$n(e,ll)),tt(a,"keypress",$n(e,al)),tt(a,"focus",function(t){return yn(e,t)}),tt(a,"blur",function(t){return bn(e,t)})}(this),Ho(),Un(this),this.curOp.forceUpdate=!0,Di(this,n),t.autofocus&&!m||this.hasFocus()?setTimeout(E(yn,this),20):bn(this),wl)wl.hasOwnProperty(u)&&wl[u](r,t[u],yl);Ln(this),t.finishInit&&t.finishInit(this);for(var c=0;c<kl.length;++c)kl[c](r);Vn(this),a&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}Ll.defaults=bl,Ll.optionHandlers=wl;var kl=[];function Tl(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=Rt(e,t).state:r="prev");var l=e.options.tabSize,s=ae(o,t),a=z(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==r&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==U||u>150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?z(ae(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(f<u&&(h+=_(u-f)),h!=c)return co(o,h,ve(t,0),ve(t,c.length),"+input"),s.stateAfter=null,!0;for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<c.length){var v=ve(t,c.length);Xi(o,p,new bi(v,v));break}}}Ll.defineInitHook=function(e){return kl.push(e)};var Ml=null;function Nl(e){Ml=e}function Ol(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var l=e.state.pasteIncoming||"paste"==i,s=xt(t),a=null;if(l&&n.ranges.length>1)if(Ml&&Ml.text.join("\n")==t){if(n.ranges.length%Ml.text.length==0){a=[];for(var u=0;u<Ml.text.length;u++)a.push(o.splitLines(Ml.text[u]))}}else s.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(a=q(s,function(e){return[e]}));for(var c=e.curOp.updateInput,h=n.ranges.length-1;h>=0;h--){var f=n.ranges[h],d=f.from(),p=f.to();f.empty()&&(r&&r>0?d=ve(d.line,d.ch-r):e.state.overwrite&&!l?p=ve(p.line,Math.min(ae(o,p.line).text.length,p.ch+$(s).length)):l&&Ml&&Ml.lineWise&&Ml.text.join("\n")==t&&(d=p=ve(d.line,0)));var g={from:d,to:p,text:a?a[h%a.length]:s,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};oo(e.doc,g),ar(e,"inputRead",e,g)}t&&!l&&Dl(e,t),Mn(e),e.curOp.updateInput<2&&(e.curOp.updateInput=c),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Al(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||_n(t,function(){return Ol(t,r,0,null,"paste")}),!0}function Dl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){l=Tl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(ae(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Tl(e,i.head.line,"smart"));l&&ar(e,"electricInput",e,i.head.line)}}}function Wl(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:ve(i,0),head:ve(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function Hl(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function Fl(){var e=O("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=O("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return a?e.style.width="1000px":e.setAttribute("wrap","off"),g&&(e.style.border="1px solid black"),Hl(e),t}function Pl(e,t,r,n,i){var o=t,l=r,s=ae(e,t.line);function a(n){var o,l;if(null==(o=i?function(e,t,r,n){var i=Je(t,e.doc.direction);if(!i)return $o(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=Ze(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return $o(t,r,n);var s,a=function(e,r){return _o(t,e instanceof ve?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Wr(e,t),Qr(e,t,s,r)):{begin:0,end:t.text.length}},c=u("before"==r.sticky?a(r,-1):r.ch);if("rtl"==e.doc.direction||1==l.level){var h=1==l.level==n<0,f=a(r,h?1:-1);if(null!=f&&(h?f<=l.to&&f<=c.end:f>=l.from&&f>=c.begin)){var d=h?"before":"after";return new ve(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new ve(r.line,a(e,1),"before"):new ve(r.line,e,"after")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):$o(s,t,r))){if(n||(l=t.line+r)<e.first||l>=e.first+e.size||(t=new ve(l,t.ch,t.sticky),!(s=ae(e,l))))return!1;t=qo(i,e.cm,s,t.line,r)}else t=o;return!0}if("char"==n)a();else if("column"==n)a(!0);else if("word"==n||"group"==n)for(var u=null,c="group"==n,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||"\n",p=te(d,h)?"w":c&&"\n"==d?"n":!c||/\s/.test(d)?null:"p";if(!c||f||p||(p="s"),u&&u!=p){r<0&&(r=1,a(),t.sticky="after");break}if(p&&(u=p),r>0&&!a(!f))break}var g=to(e,t,o,l,!0);return ye(o,g)&&(g.hitSide=!0),g}function El(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*tn(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=qr(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var Il=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function zl(e,t){var r=Dr(e,t.line);if(!r||r.hidden)return null;var n=ae(e.doc,t.line),i=Or(r,n,t.line),o=Je(n,e.doc.direction),l="left";o&&(l=Ze(o,t.ch)%2?"right":"left");var s=Er(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function Rl(e,t){return t&&(e.bad=!0),e}function Bl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Rl(e.clipPos(ve(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return Gl(o,t,r)}}function Gl(e,t,r){var n=e.text.firstChild,i=!1;if(!t||!D(n,t))return Rl(ve(fe(e.line),0),!0);if(t==n&&(i=!0,t=n.childNodes[r],r=0,!t)){var o=e.rest?$(e.rest):e.line;return Rl(ve(fe(o),o.text.length),i)}var l=3==t.nodeType?t:null,s=t;for(l||1!=t.childNodes.length||3!=t.firstChild.nodeType||(l=t.firstChild,r&&(r=l.nodeValue.length));s.parentNode!=n;)s=s.parentNode;var a=e.measure,u=a.maps;function c(t,r,n){for(var i=-1;i<(u?u.length:0);i++)for(var o=i<0?a.map:u[i],l=0;l<o.length;l+=3){var s=o[l+2];if(s==t||s==r){var c=fe(i<0?e.line:e.rest[i]),h=o[l]+n;return(n<0||s!=t)&&(h=o[l+(n?1:0)]),ve(c,h)}}}var h=c(l,s,r);if(h)return Rl(h,i);for(var f=s.nextSibling,d=l?l.nodeValue.length-r:0;f;f=f.nextSibling){if(h=c(f,f.firstChild,0))return Rl(ve(h.line,h.ch-d),i);d+=f.textContent.length}for(var p=s.previousSibling,g=r;p;p=p.previousSibling){if(h=c(p,p.firstChild,-1))return Rl(ve(h.line,h.ch+g),i);g+=p.textContent.length}}Il.prototype.init=function(e){var t=this,r=this,n=r.cm,i=r.div=e.lineDiv;function o(e){if(!ot(n,e)){if(n.somethingSelected())Nl({lineWise:!1,text:n.getSelections()}),"cut"==e.type&&n.replaceSelection("",null,"cut");else{if(!n.options.lineWiseCopyCut)return;var t=Wl(n);Nl({lineWise:!0,text:t.text}),"cut"==e.type&&n.operation(function(){n.setSelections(t.ranges,0,V),n.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var o=Ml.text.join("\n");if(e.clipboardData.setData("Text",o),e.clipboardData.getData("Text")==o)return void e.preventDefault()}var l=Fl(),s=l.firstChild;n.display.lineSpace.insertBefore(l,n.display.lineSpace.firstChild),s.value=Ml.text.join("\n");var a=document.activeElement;P(s),setTimeout(function(){n.display.lineSpace.removeChild(l),a.focus(),a==i&&r.showPrimarySelection()},50)}}Hl(i,n.options.spellcheck),tt(i,"paste",function(e){ot(n,e)||Al(e,n)||s<=11&&setTimeout($n(n,function(){return t.updateFromDOM()}),20)}),tt(i,"compositionstart",function(e){t.composing={data:e.data,done:!1}}),tt(i,"compositionupdate",function(e){t.composing||(t.composing={data:e.data,done:!1})}),tt(i,"compositionend",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),tt(i,"touchstart",function(){return r.forceCompositionEnd()}),tt(i,"input",function(){t.composing||t.readFromDOMSoon()}),tt(i,"copy",o),tt(i,"cut",o)},Il.prototype.prepareSelection=function(){var e=hn(this.cm,!1);return e.focus=this.cm.state.focused,e},Il.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Il.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Il.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),i=n.from(),o=n.to();if(t.display.viewTo==t.display.viewFrom||i.line>=t.display.viewTo||o.line<t.display.viewFrom)e.removeAllRanges();else{var l=Bl(t,e.anchorNode,e.anchorOffset),s=Bl(t,e.focusNode,e.focusOffset);if(!l||l.bad||!s||s.bad||0!=me(xe(l,s),i)||0!=me(we(l,s),o)){var a=t.display.view,u=i.line>=t.display.viewFrom&&zl(t,i)||{node:a[0].measure.map[2],offset:0},c=o.line<t.display.viewTo&&zl(t,o);if(!c){var h=a[a.length-1].measure,f=h.maps?h.maps[h.maps.length-1]:h.map;c={node:f[f.length-1],offset:f[f.length-2]-f[f.length-3]}}if(u&&c){var d,p=e.rangeCount&&e.getRangeAt(0);try{d=k(u.node,u.offset,c.offset,c.node)}catch(wt){}d&&(!r&&t.state.focused?(e.collapse(u.node,u.offset),d.collapsed||(e.removeAllRanges(),e.addRange(d))):(e.removeAllRanges(),e.addRange(d)),p&&null==e.anchorNode?e.addRange(p):r&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Il.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Il.prototype.showMultipleSelections=function(e){N(this.cm.display.cursorDiv,e.cursors),N(this.cm.display.selectionDiv,e.selection)},Il.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Il.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return D(this.div,t)},Il.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Il.prototype.blur=function(){this.div.blur()},Il.prototype.getField=function(){return this.div},Il.prototype.supportsTouch=function(){return!0},Il.prototype.receivedFocus=function(){var e=this;this.selectionInEditor()?this.pollSelection():_n(this.cm,function(){return e.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))})},Il.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Il.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(v&&c&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=Bl(t,e.anchorNode,e.anchorOffset),n=Bl(t,e.focusNode,e.focusOffset);r&&n&&_n(t,function(){$i(t.doc,xi(r,n),V),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Il.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,r,n=this.cm,i=n.display,o=n.doc.sel.primary(),l=o.from(),s=o.to();if(0==l.ch&&l.line>n.firstLine()&&(l=ve(l.line-1,ae(n.doc,l.line-1).length)),s.ch==ae(n.doc,s.line).text.length&&s.line<n.lastLine()&&(s=ve(s.line+1,0)),l.line<i.viewFrom||s.line>i.viewTo-1)return!1;l.line==i.viewFrom||0==(e=un(n,l.line))?(t=fe(i.view[0].line),r=i.view[0].node):(t=fe(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=un(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=fe(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(){l&&(o+=s,a&&(o+=s),l=a=!1)}function c(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void c(r);var o,f=t.getAttribute("cm-marker");if(f){var d=e.findMarks(ve(n,0),ve(i+1,0),(v=+f,function(e){return e.id==v}));return void(d.length&&(o=d[0].find(0))&&c(ue(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g<t.childNodes.length;g++)h(t.childNodes[g]);/^(pre|p)$/i.test(t.nodeName)&&(a=!0),p&&(l=!0)}else 3==t.nodeType&&c(t.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));var v}for(;h(t),t!=r;)t=t.nextSibling,a=!1;return o}(n,r,u,t,a)),f=ue(n.doc,ve(t,0),ve(a,ae(n.doc,a).text.length));h.length>1&&f.length>1;)if($(h)==$(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);d<m&&g.charCodeAt(d)==v.charCodeAt(d);)++d;for(var y=$(h),b=$(f),w=Math.min(y.length-(1==h.length?d:0),b.length-(1==f.length?d:0));p<w&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)++p;if(1==h.length&&1==f.length&&t==l.line)for(;d&&d>l.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=ve(t,d),C=ve(a,f.length?$(f).length-p:0);return h.length>1||h[0]||me(x,C)?(co(n.doc,h,x,C,"+input"),!0):void 0},Il.prototype.ensurePolled=function(){this.forceCompositionEnd()},Il.prototype.reset=function(){this.forceCompositionEnd()},Il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Il.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Il.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||_n(this.cm,function(){return Qn(e.cm)})},Il.prototype.setUneditable=function(e){e.contentEditable="false"},Il.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||$n(this.cm,Ol)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Il.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Il.prototype.onContextMenu=function(){},Il.prototype.resetPosition=function(){},Il.prototype.needsContentAttribute=!0;var Ul=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Ul.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ot(n,e)){if(n.somethingSelected())Nl({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Wl(n);Nl({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(n.state.cutIncoming=!0)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),tt(i,"input",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),tt(i,"paste",function(e){ot(n,e)||Al(e,n)||(n.state.pasteIncoming=!0,r.fastPoll())}),tt(i,"cut",o),tt(i,"copy",o),tt(e.scroller,"paste",function(t){Cr(e,t)||ot(n,t)||(n.state.pasteIncoming=!0,r.focus())}),tt(e.lineSpace,"selectstart",function(t){Cr(e,t)||ut(t)}),tt(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),tt(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Ul.prototype.createField=function(e){this.wrapper=Fl(),this.textarea=this.wrapper.firstChild},Ul.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=hn(e);if(e.options.moveInputWithCursor){var i=Yr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Ul.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ul.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},Ul.prototype.getField=function(){return this.textarea},Ul.prototype.supportsTouch=function(){return!1},Ul.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(wt){}},Ul.prototype.blur=function(){this.textarea.blur()},Ul.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ul.prototype.receivedFocus=function(){this.slowPoll()},Ul.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Ul.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Ul.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||Ct(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a<u&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return _n(t,function(){Ol(t,i.slice(a),n.length-a,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Ul.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ul.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Ul.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=an(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&$n(r,$i)(r.doc,xi(o),V);var c,f=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=window.scrollY),n.input.focus(),a&&window.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){ft(e);var g=function(){nt(window,"mouseup",g),setTimeout(m,20)};tt(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=f,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?$n(r,no)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Ul.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Ul.prototype.setUneditable=function(){},Ul.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=yl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=yl,r("value","",function(e,t){return e.setValue(t)},!0),r("mode",null,function(e,t){e.doc.modeOption=t,Ti(e)},!0),r("indentUnit",2,Ti,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,function(e){Mi(e),Br(e),Qn(e)},!0),r("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(ve(n,o))}n++});for(var i=r.length-1;i>=0;i--)co(e.doc,t,r[i],ve(r[i].line,r[i].ch+t.length))}}),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=yl&&e.refresh()}),r("specialCharPlaceholder",Jt,function(e){return e.refresh()},!0),r("electricChars",!0),r("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),r("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",function(e){ml(e),xl(e)},!0),r("keyMap","default",function(e,t,r){var n=Xo(t),i=r!=yl&&Xo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Sl,!0),r("gutters",[],function(e){fi(e.options),xl(e)},!0),r("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?on(e.display)+"px":"0",e.refresh()},!0),r("coverGutterNextToScrollbar",!1,function(e){return In(e)},!0),r("scrollbarStyle","native",function(e){Bn(e),In(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r("lineNumbers",!1,function(e){fi(e.options),xl(e)},!0),r("firstLineNumber",1,xl,!0),r("lineNumberFormatter",function(e){return e},xl,!0),r("showCursorWhenSelecting",!1,cn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,function(e,t){"nocursor"==t&&(bn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),r("dragDrop",!0,Cl),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,cn,!0),r("singleCursorHeightPerLine",!0,cn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Mi,!0),r("addModeClass",!1,Mi,!0),r("pollInterval",100),r("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),r("historyEventDelay",1250),r("viewportMargin",10,function(e){return e.refresh()},!0),r("maxHighlightLength",1e4,Mi,!0),r("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),r("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),r("autofocus",null),r("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),r("phrases",null)}(Ll),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&$n(this,t[e])(this,r,i),it(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Xo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:qn(function(t,r){var n=t.token?t:e.getMode(this.options,t);if(n.startState)throw new Error("Overlays may not be stateful.");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:n,modeSpec:t,opaque:r&&r.opaque,priority:r&&r.priority||0},function(e){return e.priority}),this.state.modeGen++,Qn(this)}),removeOverlay:qn(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||"string"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void Qn(this)}}),indentLine:qn(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),pe(this.doc,e)&&Tl(this,e,t,r)}),indentSelection:qn(function(e){for(var t=this.doc.sel.ranges,r=-1,n=0;n<t.length;n++){var i=t[n];if(i.empty())i.head.line>r&&(Tl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&Mn(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a<r;++a)Tl(this,a,e);var u=this.doc.sel.ranges;0==o.ch&&t.length==u.length&&u[n].from().ch>0&&Xi(this.doc,n,new bi(o,u[n].to()),V)}}}),getTokenAt:function(e,t){return Kt(this,e,t)},getLineTokens:function(e,t){return Kt(this,ve(e),t,!0)},getTokenTypeAt:function(e){e=Se(this.doc,e);var t,r=zt(this,ae(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]<o)){t=r[2*l+2];break}n=l+1}}var s=t?t.indexOf("overlay "):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(t){var r=this.doc.mode;return r.innerMode?e.innerMode(r,this.getTokenAt(t).state).mode:r},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!r.hasOwnProperty(t))return n;var i=r[t],o=this.getModeAt(e);if("string"==typeof o[t])i[o[t]]&&n.push(i[o[t]]);else if(o[t])for(var l=0;l<o[t].length;l++){var s=i[o[t][l]];s&&n.push(s)}else o.helperType&&i[o.helperType]?n.push(i[o.helperType]):i[o.name]&&n.push(i[o.name]);for(var a=0;a<i._global.length;a++){var u=i._global[a];u.pred(o,this)&&-1==B(n,u.val)&&n.push(u.val)}return n},getStateAfter:function(e,t){var r=this.doc;return Rt(this,(e=Ce(r,null==e?r.first+r.size-1:e))+1,t).state},cursorCoords:function(e,t){var r=this.doc.sel.primary();return Yr(this,null==e?r.head:"object"==typeof e?Se(this.doc,e):e?r.from():r.to(),t||"page")},charCoords:function(e,t){return Xr(this,Se(this.doc,e),t||"page")},coordsChar:function(e,t){return qr(this,(e=jr(this,e,t||"page")).left,e.top)},lineAtHeight:function(e,t){return e=jr(this,{top:e,left:0},t||"page").top,de(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=ae(this.doc,e)}else n=e;return Kr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Ye(n):0)},defaultTextHeight:function(){return tn(this.display)},defaultCharWidth:function(){return rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Yr(this,Se(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=kn(o,l)).scrollTop&&Dn(o,s.scrollTop),null!=s.scrollLeft&&Hn(o,s.scrollLeft))},triggerOnKeyDown:qn(ll),triggerOnKeyPress:qn(al),triggerOnKeyUp:sl,triggerOnMouseDown:qn(fl),execCommand:function(e){if(Zo.hasOwnProperty(e))return Zo[e].call(null,this)},triggerElectric:qn(function(e){Dl(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=Se(this.doc,e),l=0;l<t&&!(o=Pl(this.doc,o,i,r,n)).hitSide;++l);return o},moveH:qn(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?Pl(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},j)}),deleteH:qn(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection("",null,"+delete"):Yo(this,function(r){var i=Pl(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var l=Se(this.doc,e),s=0;s<t;++s){var a=Yr(this,l,"div");if(null==o?o=a.left:a.left=o,(l=El(this,a,i,r)).hitSide)break}return l},moveV:qn(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var s=Yr(r,l.head,"div");null!=l.goalColumn&&(s.left=l.goalColumn),i.push(s.left);var a=El(r,s,e,t);return"page"==t&&l==n.sel.primary()&&Tn(r,Xr(r,a,"div").top-s.top),a},j),i.length)for(var l=0;l<n.sel.ranges.length;l++)n.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=ae(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),l=te(o,i)?function(e){return te(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!te(e)};r>0&&l(t.charAt(r-1));)--r;for(;n<t.length&&l(t.charAt(n));)++n}return new bi(ve(e.line,r),ve(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?H(this.display.cursorDiv,"CodeMirror-overwrite"):T(this.display.cursorDiv,"CodeMirror-overwrite"),it(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==W()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:qn(function(e,t){Nn(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Tr(this)-this.display.barHeight,width:e.scrollWidth-Tr(this)-this.display.barWidth,clientHeight:Nr(this),clientWidth:Mr(this)}},scrollIntoView:qn(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:ve(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?function(e,t){On(e),e.curOp.scrollToPos=t}(this,e):An(this,e.from,e.to,e.margin)}),setSize:qn(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Rr(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Jn(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,it(this,"refresh",this)}),operation:function(e){return _n(this,e)},startOperation:function(){return Un(this)},endOperation:function(){return Vn(this)},refresh:qn(function(){var e=this.display.cachedTextHeight;Qn(this),this.curOp.forceUpdate=!0,Br(this),Nn(this,this.doc.scrollLeft,this.doc.scrollTop),ui(this),(null==e||Math.abs(e-tn(this.display))>.5)&&sn(this),it(this,"refresh",this)}),swapDoc:qn(function(e){var t=this.doc;return t.cm=null,Di(this,e),Br(this),this.display.input.reset(),Nn(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,ar(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},at(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Ll);var Vl="iter insert remove copy getEditor constructor".split(" ");for(var Kl in Mo.prototype)Mo.prototype.hasOwnProperty(Kl)&&B(Vl,Kl)<0&&(Ll.prototype[Kl]=function(e){return function(){return e.apply(this.doc,arguments)}}(Mo.prototype[Kl]));return at(Mo),Ll.inputStyles={textarea:Ul,contenteditable:Il},Ll.defineMode=function(e){Ll.defaults.mode||"null"==e||(Ll.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),kt[e]=t}.apply(this,arguments)},Ll.defineMIME=function(e,t){Tt[e]=t},Ll.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Ll.defineMIME("text/plain","null"),Ll.defineExtension=function(e,t){Ll.prototype[e]=t},Ll.defineDocExtension=function(e,t){Mo.prototype[e]=t},Ll.fromTextArea=function(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(tt(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(wt){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(nt(e.form,"submit",n),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=Ll(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=nt,e.on=tt,e.wheelEventPixels=vi,e.Doc=Mo,e.splitLines=xt,e.countColumn=z,e.findColumn=X,e.isWordChar=ee,e.Pass=U,e.signal=it,e.Line=Yt,e.changeEnd=Ci,e.scrollbarModel=Rn,e.Pos=ve,e.cmpPos=me,e.modes=kt,e.mimeModes=Tt,e.resolveMode=Mt,e.getMode=Nt,e.modeExtensions=Ot,e.extendMode=At,e.copyState=Dt,e.startState=Ht,e.innerMode=Wt,e.commands=Zo,e.keyMap=Ro,e.keyName=jo,e.isModifierKey=Vo,e.lookupKey=Uo,e.normalizeKeyMap=Go,e.StringStream=Ft,e.SharedTextMarker=So,e.TextMarker=xo,e.LineWidget=yo,e.e_preventDefault=ut,e.e_stopPropagation=ct,e.e_stop=ft,e.addClass=H,e.contains=D,e.rmClass=T,e.keyNames=Po}(Ll),Ll.version="5.42.2",Ll});
+},{}],"5Uxn":[function(require,module,exports) {
+
+},{}],"BaoT":[function(require,module,exports) {
+var define;
+var e;!function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],t):t(CodeMirror)}(function(e){"use strict";e.defineMode("elm",function(){function e(e,t,r){return t(r),r(e,t)}var t=/[a-z_]/,r=/[A-Z]/,n=/[0-9]/,i=/[0-9A-Fa-f]/,u=/[0-7]/,a=/[a-z_A-Z0-9\']/,o=/[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]/,f=/[(),;[\]`{}]/,l=/[ \t\v\f]/;function c(){return function(m,p){if(m.eatWhile(l))return null;var h=m.next();if(f.test(h)){if("{"==h&&m.eat("-")){var v="comment";return m.eat("#")&&(v="meta"),e(m,p,function e(t,r){if(0==r)return c();return function(n,i){for(var u=r;!n.eol();){var a=n.next();if("{"==a&&n.eat("-"))++u;else if("-"==a&&n.eat("}")&&0==--u)return i(c()),t}return i(e(t,u)),t}}(v,1))}return null}if("'"==h)return m.eat("\\"),m.next(),m.eat("'")?"string":"error";if('"'==h)return e(m,p,s);if(r.test(h))return m.eatWhile(a),m.eat(".")?"qualifier":"variable-2";if(t.test(h)){var x=1===m.pos;return m.eatWhile(a),x?"type":"variable"}if(n.test(h)){if("0"==h){if(m.eat(/[xX]/))return m.eatWhile(i),"integer";if(m.eat(/[oO]/))return m.eatWhile(u),"number"}m.eatWhile(n);v="number";return m.eat(".")&&(v="number",m.eatWhile(n)),m.eat(/[eE]/)&&(v="number",m.eat(/[-+]/),m.eatWhile(n)),v}return o.test(h)?"-"==h&&m.eat(/-/)&&(m.eatWhile(/-/),!m.eat(o))?(m.skipToEnd(),"comment"):(m.eatWhile(o),"builtin"):"error"}}function s(e,t){for(;!e.eol();){var r=e.next();if('"'==r)return t(c()),"string";if("\\"==r){if(e.eol()||e.eat(l))return t(m),"string";e.eat("&")||e.next()}}return t(c()),"error"}function m(t,r){return t.eat("\\")?e(t,r,s):(t.next(),r(c()),"error")}var p=function(){for(var e={},t=["case","of","as","if","then","else","let","in","infix","infixl","infixr","type","alias","input","output","foreign","loopback","module","where","import","exposing","_","..","|",":","=","\\",'"',"->","<-"],r=t.length;r--;)e[t[r]]="keyword";return e}();return{startState:function(){return{f:c()}},copyState:function(e){return{f:e.f}},token:function(e,t){var r=t.f(e,function(e){t.f=e}),n=e.current();return p.hasOwnProperty(n)?p[n]:r}}}),e.defineMIME("text/x-elm","elm")});
+},{"../../lib/codemirror":"e7zg"}],"iOBI":[function(require,module,exports) {
+var define;
+var e;!function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof e&&e.amd?e(["../../lib/codemirror"],t):t(CodeMirror)}(function(e){"use strict";e.defineMode("javascript",function(t,r){var n,a,i=t.indentUnit,o=r.statementIndent,c=r.jsonld,s=r.json||c,u=r.typescript,l=r.wordCharacters||/[\w$\xa1-\uffff]/,f=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),a=e("keyword d"),i=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:i,typeof:i,instanceof:i,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),d=/[+\-*&%=<>!?|~^@]/,p=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function m(e,t,r){return n=e,a=r,t}function v(e,t){var r,n=e.next();if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){var n,a=!1;if(c&&"@"==e.peek()&&e.match(p))return t.tokenize=v,m("jsonld-keyword","meta");for(;null!=(n=e.next())&&(n!=r||a);)a=!a&&"\\"==n;return a||(t.tokenize=v),m("string","string")}),t.tokenize(e,t);if("."==n&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return m("number","number");if("."==n&&e.match(".."))return m("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return m(n);if("="==n&&e.eat(">"))return m("=>","operator");if("0"==n&&e.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return m("number","number");if(/\d/.test(n))return e.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),m("number","number");if("/"==n)return e.eat("*")?(t.tokenize=k,k(e,t)):e.eat("/")?(e.skipToEnd(),m("comment","comment")):Le(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),m("regexp","string-2")):(e.eat("="),m("operator","operator",e.current()));if("`"==n)return t.tokenize=y,y(e,t);if("#"==n)return e.skipToEnd(),m("error","error");if(d.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),m("operator","operator",e.current());if(l.test(n)){e.eatWhile(l);var a=e.current();if("."!=t.lastType){if(f.propertyIsEnumerable(a)){var i=f[a];return m(i.type,i.style,a)}if("async"==a&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return m("async","keyword",a)}return m("variable","variable",a)}}function k(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=v;break}n="*"==r}return m("comment","comment")}function y(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=v;break}n=!n&&"\\"==r}return m("quasi","string-2",e.current())}var w="([{}])";function b(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(u){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var a=0,i=!1,o=r-1;o>=0;--o){var c=e.string.charAt(o),s=w.indexOf(c);if(s>=0&&s<3){if(!a){++o;break}if(0==--a){"("==c&&(i=!0);break}}else if(s>=3&&s<6)++a;else if(l.test(c))i=!0;else{if(/["'\/]/.test(c))return;if(i&&!a){++o;break}}}i&&!a&&(t.fatArrowAt=o)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function h(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function g(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var j={state:null,column:null,marked:null,cc:null};function M(){for(var e=arguments.length-1;e>=0;e--)j.cc.push(arguments[e])}function V(){return M.apply(null,arguments),!0}function A(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function E(e){var t=j.state;if(j.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var n=function e(t,r){if(r){if(r.block){var n=e(t,r.prev);return n?n==r.prev?r:new I(n,r.vars,!0):null}return A(t,r.vars)?r:new I(r.prev,new T(t,r.vars),!1)}return null}(e,t.context);if(null!=n)return void(t.context=n)}else if(!A(e,t.localVars))return void(t.localVars=new T(e,t.localVars));r.globalVars&&!A(e,t.globalVars)&&(t.globalVars=new T(e,t.globalVars))}function z(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function I(e,t,r){this.prev=e,this.vars=t,this.block=r}function T(e,t){this.name=e,this.next=t}var $=new T("this",new T("arguments",null));function C(){j.state.context=new I(j.state.context,j.state.localVars,!1),j.state.localVars=$}function q(){j.state.context=new I(j.state.context,j.state.localVars,!0),j.state.localVars=null}function O(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}function P(e,t){var r=function(){var r=j.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var a=r.lexical;a&&")"==a.type&&a.align;a=a.prev)n=a.indented;r.lexical=new h(n,j.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function S(){var e=j.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function N(e){return function t(r){return r==e?V():";"==e||"}"==r||")"==r||"]"==r?M():V(t)}}function U(e,t){return"var"==e?V(P("vardef",t),we,N(";"),S):"keyword a"==e?V(P("form"),D,U,S):"keyword b"==e?V(P("form"),U,S):"keyword d"==e?j.stream.match(/^\s*$/,!1)?V():V(P("stat"),G,N(";"),S):"debugger"==e?V(N(";")):"{"==e?V(P("}"),q,oe,S,O):";"==e?V():"if"==e?("else"==j.state.lexical.info&&j.state.cc[j.state.cc.length-1]==S&&j.state.cc.pop()(),V(P("form"),D,U,S,Me)):"function"==e?V(Te):"for"==e?V(P("form"),Ve,U,S):"class"==e||u&&"interface"==t?(j.marked="keyword",V(P("form"),qe,S)):"variable"==e?u&&"declare"==t?(j.marked="keyword",V(U)):u&&("module"==t||"enum"==t||"type"==t)&&j.stream.match(/^\s*\w/,!1)?(j.marked="keyword","enum"==t?V(Je):"type"==t?V(le,N("operator"),le,N(";")):V(P("form"),be,N("{"),P("}"),oe,S,S)):u&&"namespace"==t?(j.marked="keyword",V(P("form"),H,oe,S)):u&&"abstract"==t?(j.marked="keyword",V(U)):V(P("stat"),_):"switch"==e?V(P("form"),D,N("{"),P("}","switch"),q,oe,S,S,O):"case"==e?V(H,N(":")):"default"==e?V(N(":")):"catch"==e?V(P("form"),C,B,U,S,O):"export"==e?V(P("stat"),Ne,S):"import"==e?V(P("stat"),Be,S):"async"==e?V(U):"@"==t?V(H,U):M(P("stat"),H,N(";"),S)}function B(e){if("("==e)return V($e,N(")"))}function H(e,t){return F(e,t,!1)}function W(e,t){return F(e,t,!0)}function D(e){return"("!=e?M():V(P(")"),H,N(")"),S)}function F(e,t,r){if(j.state.fatArrowAt==j.stream.start){var n=r?X:R;if("("==e)return V(C,P(")"),ae($e,")"),S,N("=>"),n,O);if("variable"==e)return M(C,be,N("=>"),n,O)}var a=r?K:J;return x.hasOwnProperty(e)?V(a):"function"==e?V(Te,a):"class"==e||u&&"interface"==t?(j.marked="keyword",V(P("form"),Ce,S)):"keyword c"==e||"async"==e?V(r?W:H):"("==e?V(P(")"),G,N(")"),S,a):"operator"==e||"spread"==e?V(r?W:H):"["==e?V(P("]"),Ge,S,a):"{"==e?ie(te,"}",null,a):"quasi"==e?M(L,a):"new"==e?V(function(e){return function(t){return"."==t?V(e?Z:Y):"variable"==t&&u?V(ve,e?K:J):M(e?W:H)}}(r)):"import"==e?V(H):V()}function G(e){return e.match(/[;\}\)\],]/)?M():M(H)}function J(e,t){return","==e?V(H):K(e,t,!1)}function K(e,t,r){var n=0==r?J:K,a=0==r?H:W;return"=>"==e?V(C,r?X:R,O):"operator"==e?/\+\+|--/.test(t)||u&&"!"==t?V(n):u&&"<"==t&&j.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?V(P(">"),ae(le,">"),S,n):"?"==t?V(H,N(":"),a):V(a):"quasi"==e?M(L,n):";"!=e?"("==e?ie(W,")","call",n):"."==e?V(ee,n):"["==e?V(P("]"),G,N("]"),S,n):u&&"as"==t?(j.marked="keyword",V(le,n)):"regexp"==e?(j.state.lastType=j.marked="operator",j.stream.backUp(j.stream.pos-j.stream.start-1),V(a)):void 0:void 0}function L(e,t){return"quasi"!=e?M():"${"!=t.slice(t.length-2)?V(L):V(H,Q)}function Q(e){if("}"==e)return j.marked="string-2",j.state.tokenize=y,V(L)}function R(e){return b(j.stream,j.state),M("{"==e?U:H)}function X(e){return b(j.stream,j.state),M("{"==e?U:W)}function Y(e,t){if("target"==t)return j.marked="keyword",V(J)}function Z(e,t){if("target"==t)return j.marked="keyword",V(K)}function _(e){return":"==e?V(S,U):M(J,N(";"),S)}function ee(e){if("variable"==e)return j.marked="property",V()}function te(e,t){return"async"==e?(j.marked="property",V(te)):"variable"==e||"keyword"==j.style?(j.marked="property","get"==t||"set"==t?V(re):(u&&j.state.fatArrowAt==j.stream.start&&(r=j.stream.match(/^\s*:\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+r[0].length),V(ne))):"number"==e||"string"==e?(j.marked=c?"property":j.style+" property",V(ne)):"jsonld-keyword"==e?V(ne):u&&z(t)?(j.marked="keyword",V(te)):"["==e?V(H,ce,N("]"),ne):"spread"==e?V(W,ne):"*"==t?(j.marked="keyword",V(te)):":"==e?M(ne):void 0;var r}function re(e){return"variable"!=e?M(ne):(j.marked="property",V(Te))}function ne(e){return":"==e?V(W):"("==e?M(Te):void 0}function ae(e,t,r){function n(a,i){if(r?r.indexOf(a)>-1:","==a){var o=j.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),V(function(r,n){return r==t||n==t?M():M(e)},n)}return a==t||i==t?V():V(N(t))}return function(r,a){return r==t||a==t?V():M(e,n)}}function ie(e,t,r){for(var n=3;n<arguments.length;n++)j.cc.push(arguments[n]);return V(P(t,r),ae(e,t),S)}function oe(e){return"}"==e?V():M(U,oe)}function ce(e,t){if(u){if(":"==e)return V(le);if("?"==t)return V(ce)}}function se(e){if(u&&":"==e)return j.stream.match(/^\s*\w+\s+is\b/,!1)?V(H,ue,le):V(le)}function ue(e,t){if("is"==t)return j.marked="keyword",V()}function le(e,t){return"keyof"==t||"typeof"==t?(j.marked="keyword",V("keyof"==t?le:W)):"variable"==e||"void"==t?(j.marked="type",V(me)):"string"==e||"number"==e||"atom"==e?V(me):"["==e?V(P("]"),ae(le,"]",","),S,me):"{"==e?V(P("}"),ae(de,"}",",;"),S,me):"("==e?V(ae(pe,")"),fe):"<"==e?V(ae(le,">"),le):void 0}function fe(e){if("=>"==e)return V(le)}function de(e,t){return"variable"==e||"keyword"==j.style?(j.marked="property",V(de)):"?"==t?V(de):":"==e?V(le):"["==e?V(H,ce,N("]"),de):void 0}function pe(e,t){return"variable"==e&&j.stream.match(/^\s*[?:]/,!1)||"?"==t?V(pe):":"==e?V(le):M(le)}function me(e,t){return"<"==t?V(P(">"),ae(le,">"),S,me):"|"==t||"."==e||"&"==t?V(le):"["==e?V(N("]"),me):"extends"==t||"implements"==t?(j.marked="keyword",V(le)):void 0}function ve(e,t){if("<"==t)return V(P(">"),ae(le,">"),S,me)}function ke(){return M(le,ye)}function ye(e,t){if("="==t)return V(le)}function we(e,t){return"enum"==t?(j.marked="keyword",V(Je)):M(be,ce,ge,je)}function be(e,t){return u&&z(t)?(j.marked="keyword",V(be)):"variable"==e?(E(t),V()):"spread"==e?V(be):"["==e?ie(he,"]"):"{"==e?ie(xe,"}"):void 0}function xe(e,t){return"variable"!=e||j.stream.match(/^\s*:/,!1)?("variable"==e&&(j.marked="property"),"spread"==e?V(be):"}"==e?M():"["==e?V(H,N("]"),N(":"),xe):V(N(":"),be,ge)):(E(t),V(ge))}function he(){return M(be,ge)}function ge(e,t){if("="==t)return V(W)}function je(e){if(","==e)return V(we)}function Me(e,t){if("keyword b"==e&&"else"==t)return V(P("form","else"),U,S)}function Ve(e,t){return"await"==t?V(Ve):"("==e?V(P(")"),Ae,N(")"),S):void 0}function Ae(e){return"var"==e?V(we,N(";"),ze):";"==e?V(ze):"variable"==e?V(Ee):M(H,N(";"),ze)}function Ee(e,t){return"in"==t||"of"==t?(j.marked="keyword",V(H)):V(J,ze)}function ze(e,t){return";"==e?V(Ie):"in"==t||"of"==t?(j.marked="keyword",V(H)):M(H,N(";"),Ie)}function Ie(e){")"!=e&&V(H)}function Te(e,t){return"*"==t?(j.marked="keyword",V(Te)):"variable"==e?(E(t),V(Te)):"("==e?V(C,P(")"),ae($e,")"),S,se,U,O):u&&"<"==t?V(P(">"),ae(ke,">"),S,Te):void 0}function $e(e,t){return"@"==t&&V(H,$e),"spread"==e?V($e):u&&z(t)?(j.marked="keyword",V($e)):M(be,ce,ge)}function Ce(e,t){return"variable"==e?qe(e,t):Oe(e,t)}function qe(e,t){if("variable"==e)return E(t),V(Oe)}function Oe(e,t){return"<"==t?V(P(">"),ae(ke,">"),S,Oe):"extends"==t||"implements"==t||u&&","==e?("implements"==t&&(j.marked="keyword"),V(u?le:H,Oe)):"{"==e?V(P("}"),Pe,S):void 0}function Pe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||u&&z(t))&&j.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(j.marked="keyword",V(Pe)):"variable"==e||"keyword"==j.style?(j.marked="property",V(u?Se:Te,Pe)):"["==e?V(H,ce,N("]"),u?Se:Te,Pe):"*"==t?(j.marked="keyword",V(Pe)):";"==e?V(Pe):"}"==e?V():"@"==t?V(H,Pe):void 0}function Se(e,t){return"?"==t?V(Se):":"==e?V(le,ge):"="==t?V(W):M(Te)}function Ne(e,t){return"*"==t?(j.marked="keyword",V(Fe,N(";"))):"default"==t?(j.marked="keyword",V(H,N(";"))):"{"==e?V(ae(Ue,"}"),Fe,N(";")):M(U)}function Ue(e,t){return"as"==t?(j.marked="keyword",V(N("variable"))):"variable"==e?M(W,Ue):void 0}function Be(e){return"string"==e?V():"("==e?M(H):M(He,We,Fe)}function He(e,t){return"{"==e?ie(He,"}"):("variable"==e&&E(t),"*"==t&&(j.marked="keyword"),V(De))}function We(e){if(","==e)return V(He,We)}function De(e,t){if("as"==t)return j.marked="keyword",V(He)}function Fe(e,t){if("from"==t)return j.marked="keyword",V(H)}function Ge(e){return"]"==e?V():M(ae(W,"]"))}function Je(){return M(P("form"),be,N("{"),P("}"),ae(Ke,"}"),S,S)}function Ke(){return M(be,ge)}function Le(e,t,r){return t.tokenize==v&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return O.lex=!0,S.lex=!0,{startState:function(e){var t={tokenize:v,lastType:"sof",cc:[],lexical:new h((e||0)-i,0,"block",!1),localVars:r.localVars,context:r.localVars&&new I(null,null,!1),indented:e||0};return r.globalVars&&"object"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),b(e,t)),t.tokenize!=k&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=a&&"--"!=a?n:"incdec",function(e,t,r,n,a){var i=e.cc;for(j.state=e,j.stream=a,j.marked=null,j.cc=i,j.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((i.length?i.pop():s?H:U)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return j.marked?j.marked:"variable"==r&&g(e,n)?"variable-2":t}}(t,r,n,a,e))},indent:function(t,n){if(t.tokenize==k)return e.Pass;if(t.tokenize!=v)return 0;var a,c=n&&n.charAt(0),s=t.lexical;if(!/^\s*else\b/.test(n))for(var u=t.cc.length-1;u>=0;--u){var l=t.cc[u];if(l==S)s=s.prev;else if(l!=Me)break}for(;("stat"==s.type||"form"==s.type)&&("}"==c||(a=t.cc[t.cc.length-1])&&(a==J||a==K)&&!/^[,\.=+\-*:?[\(]/.test(n));)s=s.prev;o&&")"==s.type&&"stat"==s.prev.type&&(s=s.prev);var f=s.type,p=c==f;return"vardef"==f?s.indented+("operator"==t.lastType||","==t.lastType?s.info.length+1:0):"form"==f&&"{"==c?s.indented:"form"==f?s.indented+i:"stat"==f?s.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||d.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,n)?o||i:0):"switch"!=s.info||p||0==r.doubleIndentSwitch?s.align?s.column+(p?0:1):s.indented+(p?0:i):s.indented+(/^(?:case|default)\b/.test(n)?i:2*i)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:c,jsonMode:s,expressionAllowed:Le,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=H&&t!=W||e.cc.pop()}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})});
+},{"../../lib/codemirror":"e7zg"}],"Focm":[function(require,module,exports) {
+"use strict";var e=require("./src/Main.elm"),t=require("@mapbox/mapbox-gl-style-spec"),r=o(require("@mapbox/mapbox-gl-style-spec/migrate/v9")),n=o(require("codemirror/lib/codemirror.js"));function o(e){return e&&e.__esModule?e:{default:e}}function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function l(e,t,r){return t&&c(e.prototype,t),r&&c(e,r),e}function s(e,t){return!t||"object"!==i(t)&&"function"!=typeof t?a(e):t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&m(e,t)}function p(e){var t="function"==typeof Map?new Map:void 0;return(p=function(e){if(null===e||!h(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return y(e,arguments,b(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),m(r,e)})(e)}function d(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function y(e,t,r){return(y=d()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var o=new(Function.bind.apply(e,n));return r&&m(o,r.prototype),o}).apply(null,arguments)}function h(e){return-1!==Function.toString.call(e).indexOf("[native code]")}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e){return(b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}require("codemirror/lib/codemirror.css"),require("codemirror/theme/base16-light.css"),require("codemirror/mode/elm/elm.js"),require("codemirror/mode/javascript/javascript.js");var _=e.Elm.Main.init({});customElements.define("code-editor",function(e){function t(){var e;return u(this,t),(e=s(this,b(t).call(this)))._editorValue="",e}return f(t,p(HTMLElement)),l(t,[{key:"connectedCallback",value:function(){var e=this;this._editor=(0,n.default)(this,{identUnit:4,mode:this._mode,lineNumbers:!0,value:this._editorValue,readOnly:this._readonly,lineWrapping:!0}),this._editor.on("changes",function(){e._editorValue=e._editor.getValue(),console.log("changes",e._editorValue),e.dispatchEvent(new CustomEvent("editorChanged",{detail:e._editorValue}))});var t=this.getBoundingClientRect(),r=t.width,o=t.height;this._editor.setSize(r,o)}},{key:"editorValue",get:function(){return this._editorValue},set:function(e){this._editorValue!==e&&(this._editorValue=e,this._editor&&this._editor.setValue(e))}},{key:"readonly",get:function(){return this._readonly},set:function(e){this._readonly=e,this._editor&&this._editor.setOption("readonly",e)}},{key:"mode",get:function(){return this._mode},set:function(e){this._mode=e,this._editor&&this._editor.setOption("mode",e)}}]),t}()),_.ports.requestStyleUpgrade.subscribe(function(e){try{var n=(0,r.default)((0,t.migrate)(JSON.parse(e)));_.ports.styleUpgradeComplete.send({type:"Ok",result:n})}catch(o){_.ports.styleUpgradeComplete.send({type:"Err",error:o})}});
+},{"./src/Main.elm":"3oS9","@mapbox/mapbox-gl-style-spec":"WCBj","@mapbox/mapbox-gl-style-spec/migrate/v9":"Ldbb","codemirror/lib/codemirror.js":"e7zg","codemirror/lib/codemirror.css":"5Uxn","codemirror/theme/base16-light.css":"5Uxn","codemirror/mode/elm/elm.js":"BaoT","codemirror/mode/javascript/javascript.js":"iOBI"}]},{},["Focm"], null)
+//# sourceMappingURL=/style-generator.3de3c5f3.map \ No newline at end of file
diff --git a/examples/Example02.elm b/examples/Example02.elm
index 5e04567..c485a7a 100644
--- a/examples/Example02.elm
+++ b/examples/Example02.elm
@@ -2,11 +2,11 @@ module Example02 exposing (main)
import Browser
import Html exposing (div)
-import Html.Attributes exposing (style)
+import Html.Attributes
import Mapbox.Element exposing (..)
-import Outdoors
+import Styles.SatelliteStreets exposing (style)
main =
- div [ style "height" "100vh" ]
- [ map [] Outdoors.style ]
+ div [ Html.Attributes.style "height" "100vh" ]
+ [ map [] style ]
diff --git a/examples/Outdoors.elm b/examples/Outdoors.elm
deleted file mode 100644
index 9fc5f4d..0000000
--- a/examples/Outdoors.elm
+++ /dev/null
@@ -1,1079 +0,0 @@
-module Outdoors exposing (style)
-
-import Mapbox.Expression as E exposing (false, float, int, str, true)
-import Mapbox.Layer as Layer
-import Mapbox.Source as Source
-import Mapbox.Style as Style exposing (Style(..))
-
-
-style : Style
-style =
- Style
- { transition = Style.defaultTransition
- , light = Style.defaultLight
- , layers =
- [ Layer.background "background"
- [ Layer.backgroundColor
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.rgba 239 230 214 1 )
- , ( 7, E.rgba 236 223 202 1 )
- ]
- )
- ]
- , Layer.fill "national_park"
- "mapbox-streets"
- [ Layer.sourceLayer "landuse_overlay"
- , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
- , Layer.fillColor (E.rgba 200 221 151 1)
- , Layer.fillOpacity
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, float 0 )
- , ( 6, float 0.5 )
- ]
- )
- ]
- , Layer.fill "landuse"
- "mapbox-streets"
- [ Layer.sourceLayer "landuse"
- , Layer.filter
- (E.any
- [ E.getProperty (str "class") |> E.isEqual (str "hospital")
- , E.getProperty (str "class") |> E.isEqual (str "park")
- , E.getProperty (str "class") |> E.isEqual (str "pitch")
- , E.getProperty (str "class") |> E.isEqual (str "school")
- ]
- )
- , Layer.fillColor
- (E.getProperty (str "class")
- |> E.matchesStr
- [ ( "park", E.rgba 200 221 151 1 )
- , ( "pitch", E.rgba 200 221 151 1 )
- , ( "hospital", E.rgba 242 211 211 1 )
- , ( "school", E.rgba 233 213 199 1 )
- ]
- (E.rgba 0 0 0 0)
- )
- , Layer.fillOpacity
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, float 0 )
- , ( 6, float 1 )
- ]
- )
- ]
- , Layer.line "waterway"
- "mapbox-streets"
- [ Layer.minzoom 8
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "canal")
- , E.getProperty (str "class") |> E.isEqual (str "river")
- ]
- ]
- )
- , Layer.sourceLayer "waterway"
- , Layer.lineColor (E.rgba 120 188 236 1)
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.3)
- [ ( 8.5, float 0.1 )
- , ( 20, float 8 )
- ]
- )
- , Layer.lineOpacity
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 8, float 0 )
- , ( 8.5, float 1 )
- ]
- )
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.fill "water"
- "mapbox-streets"
- [ Layer.sourceLayer "water"
- , Layer.fillColor
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.rgba 106 181 234 1 )
- , ( 7, E.rgba 120 188 236 1 )
- ]
- )
- ]
- , Layer.fill "aeroway-polygon"
- "mapbox-streets"
- [ Layer.sourceLayer "aeroway"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "Polygon")
- , E.any
- [ E.getProperty (str "type") |> E.isEqual (str "helipad")
- , E.getProperty (str "type") |> E.isEqual (str "runway")
- , E.getProperty (str "type") |> E.isEqual (str "taxiway")
- ]
- ]
- )
- , Layer.fillColor (E.rgba 196 196 196 1)
- ]
- , Layer.line "aeroway-line"
- "mapbox-streets"
- [ Layer.sourceLayer "aeroway"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.any
- [ E.getProperty (str "type") |> E.isEqual (str "runway")
- , E.getProperty (str "type") |> E.isEqual (str "taxiway")
- ]
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 10, float 0.5 )
- , ( 18, float 20 )
- ]
- )
- , Layer.lineColor (E.rgba 196 196 196 1)
- ]
- , Layer.fill "building"
- "mapbox-streets"
- [ Layer.minzoom 15
- , Layer.filter
- (E.all
- [ E.getProperty (str "type") |> E.notEqual (str "building:part")
- , E.getProperty (str "underground") |> E.isEqual (str "false")
- ]
- )
- , Layer.sourceLayer "building"
- , Layer.fillColor (E.rgba 212 200 179 1)
- , Layer.fillOpacity
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 15.5, float 0 )
- , ( 16, float 1 )
- ]
- )
- ]
- , Layer.line "pedestrian-path"
- "mapbox-streets"
- [ Layer.minzoom 14
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.all
- [ E.getProperty (str "type") |> E.notEqual (str "platform")
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "path")
- , E.getProperty (str "class") |> E.isEqual (str "pedestrian")
- ]
- ]
- ]
- )
- , Layer.sourceLayer "road"
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 14
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "pedestrian", float 1 )
- , ( "path", float 0.75 )
- ]
- (float 0.75)
- )
- , ( 20
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "pedestrian", float 8 )
- , ( "path", float 5 )
- ]
- (float 5)
- )
- ]
- )
- , Layer.lineColor
- (E.getProperty (str "type")
- |> E.matchesStr
- [ ( "sidewalk", E.rgba 221 208 186 1 )
- , ( "crossing", E.rgba 221 208 186 1 )
- ]
- (E.rgba 199 184 157 1)
- )
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.line "tunnel"
- "mapbox-streets"
- [ Layer.sourceLayer "road"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.all
- [ E.getProperty (str "type") |> E.notEqual (str "service:parking_aisle")
- , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "link")
- , E.getProperty (str "class") |> E.isEqual (str "motorway")
- , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
- , E.getProperty (str "class") |> E.isEqual (str "primary")
- , E.getProperty (str "class") |> E.isEqual (str "secondary")
- , E.getProperty (str "class") |> E.isEqual (str "service")
- , E.getProperty (str "class") |> E.isEqual (str "street")
- , E.getProperty (str "class") |> E.isEqual (str "street_limited")
- , E.getProperty (str "class") |> E.isEqual (str "tertiary")
- , E.getProperty (str "class") |> E.isEqual (str "track")
- , E.getProperty (str "class") |> E.isEqual (str "trunk")
- ]
- ]
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 5
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 0.5 )
- , ( "trunk", float 0.5 )
- , ( "primary", float 0.5 )
- , ( "secondary", float 0.01 )
- , ( "tertiary", float 0.01 )
- , ( "street", float 0 )
- , ( "street_limited", float 0 )
- , ( "motorway_link", float 0 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 12
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 3 )
- , ( "trunk", float 3 )
- , ( "primary", float 3 )
- , ( "secondary", float 2 )
- , ( "tertiary", float 2 )
- , ( "street", float 0.5 )
- , ( "street_limited", float 0.5 )
- , ( "motorway_link", float 0.5 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 18
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 30 )
- , ( "trunk", float 30 )
- , ( "primary", float 30 )
- , ( "secondary", float 24 )
- , ( "tertiary", float 24 )
- , ( "street", float 12 )
- , ( "street_limited", float 12 )
- , ( "motorway_link", float 12 )
- , ( "service", float 10 )
- , ( "track", float 10 )
- , ( "link", float 10 )
- ]
- (float 10)
- )
- ]
- )
- , Layer.lineColor
- (E.getProperty (str "class")
- |> E.matchesStr
- [ ( "street", E.rgba 255 251 244 1 )
- , ( "street_limited", E.rgba 255 251 244 1 )
- , ( "service", E.rgba 255 251 244 1 )
- , ( "track", E.rgba 255 251 244 1 )
- , ( "link", E.rgba 255 251 244 1 )
- ]
- (E.rgba 255 255 255 1)
- )
- , Layer.lineDasharray (E.floats [ 0.2, 0.2 ])
- , Layer.lineJoin E.lineJoinRound
- ]
- , Layer.line "road"
- "mapbox-streets"
- [ Layer.sourceLayer "road"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.all
- [ E.getProperty (str "type") |> E.notEqual (str "service:parking_aisle")
- , E.all
- [ E.getProperty (str "structure") |> E.notEqual (str "bridge")
- , E.getProperty (str "structure") |> E.notEqual (str "tunnel")
- ]
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "link")
- , E.getProperty (str "class") |> E.isEqual (str "motorway")
- , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
- , E.getProperty (str "class") |> E.isEqual (str "primary")
- , E.getProperty (str "class") |> E.isEqual (str "secondary")
- , E.getProperty (str "class") |> E.isEqual (str "service")
- , E.getProperty (str "class") |> E.isEqual (str "street")
- , E.getProperty (str "class") |> E.isEqual (str "street_limited")
- , E.getProperty (str "class") |> E.isEqual (str "tertiary")
- , E.getProperty (str "class") |> E.isEqual (str "track")
- , E.getProperty (str "class") |> E.isEqual (str "trunk")
- ]
- ]
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 5
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 0.5 )
- , ( "trunk", float 0.5 )
- , ( "primary", float 0.5 )
- , ( "secondary", float 0.01 )
- , ( "tertiary", float 0.01 )
- , ( "street", float 0 )
- , ( "street_limited", float 0 )
- , ( "motorway_link", float 0 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 12
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 3 )
- , ( "trunk", float 3 )
- , ( "primary", float 3 )
- , ( "secondary", float 2 )
- , ( "tertiary", float 2 )
- , ( "street", float 0.5 )
- , ( "street_limited", float 0.5 )
- , ( "motorway_link", float 0.5 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 18
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 30 )
- , ( "trunk", float 30 )
- , ( "primary", float 30 )
- , ( "secondary", float 24 )
- , ( "tertiary", float 24 )
- , ( "street", float 12 )
- , ( "street_limited", float 12 )
- , ( "motorway_link", float 12 )
- , ( "service", float 10 )
- , ( "track", float 10 )
- , ( "link", float 10 )
- ]
- (float 10)
- )
- ]
- )
- , Layer.lineColor
- (E.getProperty (str "class")
- |> E.matchesStr
- [ ( "street", E.rgba 255 251 244 1 )
- , ( "street_limited", E.rgba 255 251 244 1 )
- , ( "service", E.rgba 255 251 244 1 )
- , ( "track", E.rgba 255 251 244 1 )
- , ( "link", E.rgba 255 251 244 1 )
- ]
- (E.rgba 255 255 255 1)
- )
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.line "bridge-case"
- "mapbox-streets"
- [ Layer.sourceLayer "road"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.all
- [ E.getProperty (str "type") |> E.notEqual (str "service:parking_aisle")
- , E.getProperty (str "structure") |> E.isEqual (str "bridge")
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "link")
- , E.getProperty (str "class") |> E.isEqual (str "motorway")
- , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
- , E.getProperty (str "class") |> E.isEqual (str "primary")
- , E.getProperty (str "class") |> E.isEqual (str "secondary")
- , E.getProperty (str "class") |> E.isEqual (str "service")
- , E.getProperty (str "class") |> E.isEqual (str "street")
- , E.getProperty (str "class") |> E.isEqual (str "street_limited")
- , E.getProperty (str "class") |> E.isEqual (str "tertiary")
- , E.getProperty (str "class") |> E.isEqual (str "track")
- , E.getProperty (str "class") |> E.isEqual (str "trunk")
- ]
- ]
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 10, float 1 )
- , ( 16, float 2 )
- ]
- )
- , Layer.lineColor (E.rgba 236 223 202 1)
- , Layer.lineGapWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 5
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 0.5 )
- , ( "trunk", float 0.5 )
- , ( "primary", float 0.5 )
- , ( "secondary", float 0.01 )
- , ( "tertiary", float 0.01 )
- , ( "street", float 0 )
- , ( "street_limited", float 0 )
- , ( "motorway_link", float 0 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 12
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 3 )
- , ( "trunk", float 3 )
- , ( "primary", float 3 )
- , ( "secondary", float 2 )
- , ( "tertiary", float 2 )
- , ( "street", float 0.5 )
- , ( "street_limited", float 0.5 )
- , ( "motorway_link", float 0.5 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 18
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 30 )
- , ( "trunk", float 30 )
- , ( "primary", float 30 )
- , ( "secondary", float 24 )
- , ( "tertiary", float 24 )
- , ( "street", float 12 )
- , ( "street_limited", float 12 )
- , ( "motorway_link", float 12 )
- , ( "service", float 10 )
- , ( "track", float 10 )
- , ( "link", float 10 )
- ]
- (float 10)
- )
- ]
- )
- , Layer.lineJoin E.lineJoinRound
- ]
- , Layer.line "bridge"
- "mapbox-streets"
- [ Layer.sourceLayer "road"
- , Layer.filter
- (E.all
- [ E.geometryType |> E.isEqual (str "LineString")
- , E.all
- [ E.getProperty (str "type") |> E.notEqual (str "service:parking_aisle")
- , E.getProperty (str "structure") |> E.isEqual (str "bridge")
- , E.any
- [ E.getProperty (str "class") |> E.isEqual (str "link")
- , E.getProperty (str "class") |> E.isEqual (str "motorway")
- , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
- , E.getProperty (str "class") |> E.isEqual (str "primary")
- , E.getProperty (str "class") |> E.isEqual (str "secondary")
- , E.getProperty (str "class") |> E.isEqual (str "service")
- , E.getProperty (str "class") |> E.isEqual (str "street")
- , E.getProperty (str "class") |> E.isEqual (str "street_limited")
- , E.getProperty (str "class") |> E.isEqual (str "tertiary")
- , E.getProperty (str "class") |> E.isEqual (str "track")
- , E.getProperty (str "class") |> E.isEqual (str "trunk")
- ]
- ]
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate (E.Exponential 1.5)
- [ ( 5
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 0.5 )
- , ( "trunk", float 0.5 )
- , ( "primary", float 0.5 )
- , ( "secondary", float 0.01 )
- , ( "tertiary", float 0.01 )
- , ( "street", float 0 )
- , ( "street_limited", float 0 )
- , ( "motorway_link", float 0 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 12
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 3 )
- , ( "trunk", float 3 )
- , ( "primary", float 3 )
- , ( "secondary", float 2 )
- , ( "tertiary", float 2 )
- , ( "street", float 0.5 )
- , ( "street_limited", float 0.5 )
- , ( "motorway_link", float 0.5 )
- , ( "service", float 0 )
- , ( "track", float 0 )
- , ( "link", float 0 )
- ]
- (float 0)
- )
- , ( 18
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 30 )
- , ( "trunk", float 30 )
- , ( "primary", float 30 )
- , ( "secondary", float 24 )
- , ( "tertiary", float 24 )
- , ( "street", float 12 )
- , ( "street_limited", float 12 )
- , ( "motorway_link", float 12 )
- , ( "service", float 10 )
- , ( "track", float 10 )
- , ( "link", float 10 )
- ]
- (float 10)
- )
- ]
- )
- , Layer.lineColor
- (E.getProperty (str "class")
- |> E.matchesStr
- [ ( "street", E.rgba 255 251 244 1 )
- , ( "street_limited", E.rgba 255 251 244 1 )
- , ( "service", E.rgba 255 251 244 1 )
- , ( "track", E.rgba 255 251 244 1 )
- , ( "link", E.rgba 255 251 244 1 )
- ]
- (E.rgba 255 255 255 1)
- )
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.line "admin-state-province"
- "mapbox-streets"
- [ Layer.minzoom 2
- , Layer.filter
- (E.all
- [ E.getProperty (str "maritime") |> E.isEqual (float 0)
- , E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
- ]
- )
- , Layer.sourceLayer "admin"
- , Layer.lineDasharray
- (E.zoom
- |> E.step
- (E.floats
- [ 2
- , 0
- ]
- )
- [ ( 7
- , E.floats
- [ 2
- , 2
- , 6
- , 2
- ]
- )
- ]
- )
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 7, float 0.75 )
- , ( 12, float 1.5 )
- ]
- )
- , Layer.lineOpacity
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 2, float 0 )
- , ( 3, float 1 )
- ]
- )
- , Layer.lineColor (E.zoom |> E.step (E.rgba 204 204 204 1) [ ( 4, E.rgba 165 165 165 1 ) ])
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.line "admin-country"
- "mapbox-streets"
- [ Layer.minzoom 1
- , Layer.filter
- (E.all
- [ E.getProperty (str "admin_level") |> E.lessThanOrEqual (float 2)
- , E.getProperty (str "disputed") |> E.isEqual (float 0)
- , E.getProperty (str "maritime") |> E.isEqual (float 0)
- ]
- )
- , Layer.sourceLayer "admin"
- , Layer.lineColor (E.rgba 127 127 127 1)
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 3, float 0.5 )
- , ( 10, float 2 )
- ]
- )
- , Layer.lineJoin E.lineJoinRound
- , Layer.lineCap E.lineCapRound
- ]
- , Layer.line "admin-country-disputed"
- "mapbox-streets"
- [ Layer.minzoom 1
- , Layer.filter
- (E.all
- [ E.getProperty (str "admin_level") |> E.lessThanOrEqual (float 2)
- , E.getProperty (str "disputed") |> E.isEqual (float 1)
- , E.getProperty (str "maritime") |> E.isEqual (float 0)
- ]
- )
- , Layer.sourceLayer "admin"
- , Layer.lineColor (E.rgba 127 127 127 1)
- , Layer.lineWidth
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 3, float 0.5 )
- , ( 10, float 2 )
- ]
- )
- , Layer.lineDasharray (E.floats [ 1.5, 1.5 ])
- , Layer.lineJoin E.lineJoinRound
- ]
- , Layer.symbol "road-label"
- "mapbox-streets"
- [ Layer.minzoom 12
- , Layer.filter
- (E.any
- [ E.getProperty (str "class") |> E.isEqual (str "link")
- , E.getProperty (str "class") |> E.isEqual (str "motorway")
- , E.getProperty (str "class") |> E.isEqual (str "pedestrian")
- , E.getProperty (str "class") |> E.isEqual (str "primary")
- , E.getProperty (str "class") |> E.isEqual (str "secondary")
- , E.getProperty (str "class") |> E.isEqual (str "street")
- , E.getProperty (str "class") |> E.isEqual (str "street_limited")
- , E.getProperty (str "class") |> E.isEqual (str "tertiary")
- , E.getProperty (str "class") |> E.isEqual (str "trunk")
- ]
- )
- , Layer.sourceLayer "road_label"
- , Layer.textColor (E.rgba 0 0 0 1)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 9
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 10 )
- , ( "trunk", float 10 )
- , ( "primary", float 10 )
- , ( "secondary", float 10 )
- , ( "tertiary", float 10 )
- ]
- (float 9)
- )
- , ( 20
- , E.getProperty (str "class")
- |> E.matchesStr
- [ ( "motorway", float 15 )
- , ( "trunk", float 15 )
- , ( "primary", float 15 )
- , ( "secondary", float 15 )
- , ( "tertiary", float 15 )
- ]
- (float 14)
- )
- ]
- )
- , Layer.textMaxAngle (float 30)
- , Layer.textFont
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- , Layer.symbolPlacement E.symbolPlacementLine
- , Layer.textPadding (float 1)
- , Layer.textRotationAlignment E.anchorMap
- , Layer.textPitchAlignment E.anchorViewport
- , Layer.textField (E.getProperty (str "name_en"))
- ]
- , Layer.symbol "poi-label"
- "mapbox-streets"
- [ Layer.sourceLayer "poi_label"
- , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 3))
- , Layer.textColor (E.rgba 88 77 59 1)
- , Layer.textHaloColor (E.rgba 255 255 255 0.75)
- , Layer.textHaloWidth (float 1)
- , Layer.textHaloBlur (float 0.5)
- , Layer.textLineHeight (float 1.1)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 10, float 11 )
- , ( 18, float 13 )
- ]
- )
- , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
- , Layer.textMaxAngle (float 38)
- , Layer.textFont
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- , Layer.textPadding (float 2)
- , Layer.textOffset (E.floats [ 0, 0.75 ])
- , Layer.textAnchor E.positionTop
- , Layer.textField (E.getProperty (str "name_en"))
- , Layer.textMaxWidth (float 8)
- ]
- , Layer.symbol "airport-label"
- "mapbox-streets"
- [ Layer.sourceLayer "airport_label"
- , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
- , Layer.textColor (E.rgba 88 77 59 1)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1)
- , Layer.textLineHeight (float 1.1)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 10, float 12 )
- , ( 18, float 18 )
- ]
- )
- , Layer.iconImage
- (E.zoom
- |> E.step (E.getProperty (str "maki") |> E.append (str "-11"))
- [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
- )
- , Layer.textFont
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- , Layer.textPadding (float 2)
- , Layer.textOffset (E.floats [ 0, 0.75 ])
- , Layer.textAnchor E.positionTop
- , Layer.textField (E.zoom |> E.step (E.getProperty (str "ref")) [ ( 14, E.getProperty (str "name_en") ) ])
- , Layer.textMaxWidth (float 9)
- ]
- , Layer.symbol "place-neighborhood-suburb-label"
- "mapbox-streets"
- [ Layer.minzoom 12
- , Layer.maxzoom 15
- , Layer.filter
- (E.any
- [ E.getProperty (str "type") |> E.isEqual (str "neighbourhood")
- , E.getProperty (str "type") |> E.isEqual (str "suburb")
- ]
- )
- , Layer.sourceLayer "place_label"
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1)
- , Layer.textColor (E.rgba 86 62 20 1)
- , Layer.textField (E.getProperty (str "name_en"))
- , Layer.textTransform E.textTransformUppercase
- , Layer.textLetterSpacing (float 0.15)
- , Layer.textMaxWidth (float 8)
- , Layer.textFont
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- , Layer.textPadding (float 3)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 12, float 11 )
- , ( 16, float 16 )
- ]
- )
- ]
- , Layer.symbol "place-town-village-hamlet-label"
- "mapbox-streets"
- [ Layer.minzoom 6
- , Layer.maxzoom 14
- , Layer.filter
- (E.any
- [ E.getProperty (str "type") |> E.isEqual (str "hamlet")
- , E.getProperty (str "type") |> E.isEqual (str "town")
- , E.getProperty (str "type") |> E.isEqual (str "village")
- ]
- )
- , Layer.sourceLayer "place_label"
- , Layer.textColor (E.rgba 0 0 0 1)
- , Layer.textHaloBlur (float 0.5)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.getProperty (str "type") |> E.matchesStr [ ( "town", float 9.5 ) ] (float 8) )
- , ( 16, E.getProperty (str "type") |> E.matchesStr [ ( "town", float 20 ) ] (float 16) )
- ]
- )
- , Layer.textFont
- (E.zoom
- |> E.step
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- [ ( 12
- , E.getProperty (str "type")
- |> E.matchesStr
- [ ( "town"
- , E.strings
- [ "Roboto Medium"
- , "Arial Unicode MS Regular"
- ]
- )
- ]
- (E.strings
- [ "Roboto Regular"
- , "Arial Unicode MS Regular"
- ]
- )
- )
- ]
- )
- , Layer.textMaxWidth (float 7)
- , Layer.textField (E.getProperty (str "name_en"))
- ]
- , Layer.symbol "place-city-label-minor"
- "mapbox-streets"
- [ Layer.minzoom 1
- , Layer.maxzoom 14
- , Layer.filter
- (E.all
- [ E.not (E.hasProperty (str "scalerank"))
- , E.getProperty (str "type") |> E.isEqual (str "city")
- ]
- )
- , Layer.sourceLayer "place_label"
- , Layer.textColor
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.rgba 84 84 84 1 )
- , ( 6, E.rgba 0 0 0 1 )
- ]
- )
- , Layer.textHaloBlur (float 0.5)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1.25)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, float 12 )
- , ( 16, float 22 )
- ]
- )
- , Layer.textFont
- (E.strings
- [ "Roboto Medium"
- , "Arial Unicode MS Regular"
- ]
- )
- , Layer.textMaxWidth (float 10)
- , Layer.textField (E.getProperty (str "name_en"))
- ]
- , Layer.symbol "place-city-label-major"
- "mapbox-streets"
- [ Layer.minzoom 1
- , Layer.maxzoom 14
- , Layer.filter
- (E.all
- [ E.getProperty (str "type") |> E.isEqual (str "city")
- , E.hasProperty (str "scalerank")
- ]
- )
- , Layer.sourceLayer "place_label"
- , Layer.textColor
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.rgba 84 84 84 1 )
- , ( 6, E.rgba 0 0 0 1 )
- ]
- )
- , Layer.textHaloBlur (float 0.5)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textHaloWidth (float 1.25)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 5, E.getProperty (str "scalerank") |> E.step (float 14) [ ( 4, float 12 ) ] )
- , ( 16, E.getProperty (str "scalerank") |> E.step (float 30) [ ( 4, float 22 ) ] )
- ]
- )
- , Layer.textFont
- (E.zoom
- |> E.step
- (E.strings
- [ "Roboto Medium"
- , "Arial Unicode MS Regular"
- ]
- )
- [ ( 10
- , E.getProperty (str "scalerank")
- |> E.step
- (E.strings
- [ "Roboto Bold"
- , "Arial Unicode MS Bold"
- ]
- )
- [ ( 5
- , E.strings
- [ "Roboto Medium"
- , "Arial Unicode MS Regular"
- ]
- )
- ]
- )
- ]
- )
- , Layer.textMaxWidth (float 10)
- , Layer.textField (E.getProperty (str "name_en"))
- ]
- , Layer.symbol "state-label"
- "mapbox-streets"
- [ Layer.sourceLayer "state_label"
- , Layer.minzoom 4
- , Layer.maxzoom 8
- , Layer.textColor (E.rgba 169 164 156 1)
- , Layer.textHaloWidth (float 1)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textLineHeight (float 1.2)
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 4
- , E.getProperty (str "area")
- |> E.step (float 8)
- [ ( 20000, float 9 )
- , ( 80000, float 10 )
- ]
- )
- , ( 9
- , E.getProperty (str "area")
- |> E.step (float 14)
- [ ( 20000, float 18 )
- , ( 80000, float 23 )
- ]
- )
- ]
- )
- , Layer.textTransform E.textTransformUppercase
- , Layer.textFont
- (E.strings
- [ "Roboto Black"
- , "Arial Unicode MS Bold"
- ]
- )
- , Layer.textPadding (float 1)
- , Layer.textField (E.zoom |> E.step (E.getProperty (str "area") |> E.step (E.getProperty (str "abbr")) [ ( 80000, E.getProperty (str "name_en") ) ]) [ ( 5, E.getProperty (str "name_en") ) ])
- , Layer.textLetterSpacing (float 0.2)
- , Layer.textMaxWidth (float 6)
- ]
- , Layer.symbol "country-label"
- "mapbox-streets"
- [ Layer.sourceLayer "country_label"
- , Layer.minzoom 1
- , Layer.maxzoom 8
- , Layer.textHaloWidth (float 1.5)
- , Layer.textHaloColor (E.rgba 255 255 255 1)
- , Layer.textColor (E.rgba 0 0 0 1)
- , Layer.textField (E.getProperty (str "name_en"))
- , Layer.textMaxWidth
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 0, float 5 )
- , ( 3, float 6 )
- ]
- )
- , Layer.textFont
- (E.zoom
- |> E.step
- (E.strings
- [ "Roboto Medium"
- , "Arial Unicode MS Regular"
- ]
- )
- [ ( 4
- , E.strings
- [ "Roboto Bold"
- , "Arial Unicode MS Bold"
- ]
- )
- ]
- )
- , Layer.textSize
- (E.zoom
- |> E.interpolate E.Linear
- [ ( 2
- , E.getProperty (str "scalerank")
- |> E.step (float 13)
- [ ( 3, float 11 )
- , ( 5, float 9 )
- ]
- )
- , ( 9
- , E.getProperty (str "scalerank")
- |> E.step (float 35)
- [ ( 3, float 27 )
- , ( 5, float 22 )
- ]
- )
- ]
- )
- ]
- ]
- , sources = [ Source.vectorFromUrl "mapbox-streets" "mapbox://mapbox.mapbox-streets-v7" ]
- , misc =
- [ Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
- , Style.sprite "mapbox://sprites/astrosat/cjlnn5red6a2o2sqtzzyg7prr"
- ]
- }
diff --git a/examples/Styles/Dark.elm b/examples/Styles/Dark.elm
new file mode 100644
index 0000000..d6d339b
--- /dev/null
+++ b/examples/Styles/Dark.elm
@@ -0,0 +1,2888 @@
+module Styles.Dark exposing (style)
+
+import Mapbox.Expression as E exposing (false, float, str, true)
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background" [ Layer.backgroundColor (E.rgba 51 51 50 1) ]
+ , Layer.fill "landcover_wood"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "wood"))
+ , Layer.fillColor (E.rgba 51 51 50 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_scrub"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "scrub"))
+ , Layer.fillColor (E.rgba 51 51 50 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_grass"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "grass"))
+ , Layer.fillColor (E.rgba 51 51 50 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_crop"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "crop"))
+ , Layer.fillColor (E.rgba 51 51 50 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "national_park"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.fillColor (E.rgba 49 52 50 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 0.5 ) ])
+ ]
+ , Layer.fill "parks"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "park"))
+ , Layer.fillColor (E.rgba 49 52 50 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 0.75 ) ])
+ ]
+ , Layer.fill "pitch"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.fillColor (E.rgba 49 52 50 1)
+ ]
+ , Layer.fill "industrial"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "industrial"))
+ , Layer.fillColor (E.rgba 51 51 51 1)
+ ]
+ , Layer.fill "sand"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "sand"))
+ , Layer.fillColor (E.rgba 49 52 50 1)
+ ]
+ , Layer.fill "hillshade_highlight_bright"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 94))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.04 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_highlight_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 90))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.04 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_faint"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 89))
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.033 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 78))
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.033 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_dark"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 67))
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_extreme"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 56))
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.line "waterway-river-canal"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 8
+ , Layer.filter
+ (E.any
+ [ E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "canal")
+ )
+ ]
+ false
+ , E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "river")
+ )
+ ]
+ false
+ ]
+ )
+ , Layer.lineColor (E.rgba 24 25 26 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.3) [ ( 8.5, float 0.1 ), ( 20, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, float 0 ), ( 8.5, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapButt [ ( 11, E.lineCapRound ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.fill "water shadow"
+ "composite"
+ [ Layer.sourceLayer "water"
+ , Layer.fillColor (E.rgba 12 13 13 1)
+ , Layer.fillTranslate (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 7, E.floats [ 0, 0 ] ), ( 16, E.floats [ -1, -1 ] ) ])
+ , Layer.fillTranslateAnchor E.anchorViewport
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "water" "composite" [ Layer.sourceLayer "water", Layer.fillColor (E.rgba 24 25 26 1) ]
+ , Layer.fill "barrier_line-land-polygon"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.fillColor (E.rgba 51 51 50 1)
+ , Layer.fillOutlineColor (E.rgba 51 51 50 1)
+ ]
+ , Layer.line "barrier_line-land-line"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.99) [ ( 14, float 0.75 ), ( 20, float 40 ) ])
+ , Layer.lineColor (E.rgba 51 51 50 1)
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "aeroway-polygon"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 11
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "type") |> E.notEqual (str "apron") ])
+ , Layer.fillColor (E.rgba 68 68 68 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.5, float 1 ) ])
+ ]
+ , Layer.line "aeroway-runway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "runway") ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 9, float 1 ), ( 18, float 80 ) ])
+ ]
+ , Layer.line "aeroway-taxiway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "taxiway")
+ ]
+ )
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 0.5 ), ( 18, float 20 ) ])
+ ]
+ , Layer.fill "building"
+ "composite"
+ [ Layer.sourceLayer "building"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.fillColor (E.rgba 43 43 42 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ , Layer.fillOutlineColor (E.rgba 38 38 37 1)
+ ]
+ , Layer.line "tunnel-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 72 75 75 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "tunnel-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineColor (E.rgba 37 38 39 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.9, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.9, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.9, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.9, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-main-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 9, float 1.4 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 6.1, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "road-sidewalks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.matchesStr [ ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "crossing", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 9, float 1.4 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.lessThanOrEqual (float 1)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "bridge-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 43 43 43 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 68 68 68 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-3-4-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 25 25 25 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 0 ), ( 6, float 0.75 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 8, float 3 ) ])
+ , Layer.lineJoin E.lineJoinBevel
+ ]
+ , Layer.line "admin-2-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 10 ) ])
+ , Layer.lineColor (E.rgba 25 25 25 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 4, float 0.5 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "admin-3-4-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 2, 0 ]) [ ( 7, E.floats [ 2, 2, 6, 2 ] ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.75 ), ( 12, float 1.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 2, float 0 ), ( 3, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, E.rgba 68 68 68 1 ), ( 5, E.rgba 89 89 89 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 109 109 109 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries-dispute"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 1)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.floats [ 1.5, 1.5 ])
+ , Layer.lineColor (E.rgba 35 35 35 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "waterway-label"
+ "composite"
+ [ Layer.sourceLayer "waterway_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 30)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 12 ), ( 18, float 16 ) ])
+ ]
+ , Layer.symbol "poi-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 153 153 153 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 119 119 119 1 ), ( 9, E.rgba 186 186 186 1 ) ])
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "road-label-small"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "ferry", false )
+ , ( "golf", false )
+ , ( "link", false )
+ , ( "motorway", false )
+ , ( "path", false )
+ , ( "pedestrian", false )
+ , ( "primary", false )
+ , ( "secondary", false )
+ , ( "street", false )
+ , ( "street_limited", false )
+ , ( "tertiary", false )
+ , ( "track", false )
+ , ( "trunk", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 198 198 198 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 10 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 500)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-medium"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "pedestrian", true ), ( "street", true ), ( "street_limited", true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 198 198 198 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 10 ), ( 20, float 14 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 500)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-large"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", true ), ( "primary", true ), ( "secondary", true ), ( "tertiary", true ), ( "trunk", true ) ] false
+ )
+ , Layer.textColor (E.rgba 198 198 198 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 400)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "poi-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 153 153 153 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 119 119 119 1 ), ( 9, E.rgba 186 186 186 1 ) ])
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "water-label"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 5
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThan (float 10000))
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 13 ), ( 18, float 18 ) ])
+ ]
+ , Layer.symbol "poi-parks-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 119 119 119 1 ), ( 9, E.rgba 186 186 186 1 ) ])
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 153 153 153 1)
+ , Layer.textHaloColor (E.rgba 33 33 33 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "airport-label"
+ "composite"
+ [ Layer.sourceLayer "airport_label"
+ , Layer.minzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
+ , Layer.textColor (E.rgba 216 216 216 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 12 ), ( 18, float 18 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.75 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "ref"))) [ ( 14, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 9)
+ ]
+ , Layer.symbol "place-islets-archipelago-aboriginal"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter
+ (E.getProperty (str "type")
+ |> E.matchesStr [ ( "aboriginal_lands", true ), ( "archipelago", true ), ( "islet", true ) ] false
+ )
+ , Layer.textColor (E.rgba 216 216 216 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "place-neighbourhood"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 12
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "neighbourhood"))
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 178 178 178 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 16, float 16 ) ])
+ ]
+ , Layer.symbol "place-suburb"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 11
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "suburb"))
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 178 178 178 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 11 ), ( 15, float 18 ) ])
+ ]
+ , Layer.symbol "place-hamlet"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "hamlet"))
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 216 216 216 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11.5 ), ( 15, float 16 ) ])
+ ]
+ , Layer.symbol "place-village"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 11
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "village"))
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, E.rgba 191 191 191 1 ), ( 11, E.rgba 216 216 216 1 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11.5 ), ( 16, float 18 ) ])
+ ]
+ , Layer.symbol "place-town"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 7
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "town"))
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, E.rgba 191 191 191 1 ), ( 11, E.rgba 216 216 216 1 ) ])
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 11.5 ), ( 15, float 20 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 12, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-islands"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "island"))
+ , Layer.textColor (E.rgba 216 216 216 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-sm"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank")
+ |> E.matchesFloat [ ( 0, false ), ( 1, false ), ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 229 229 229 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 12 ), ( 14, float 22 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-md-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textColor (E.rgba 229 229 229 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.1 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.iconImage (str "dot-10")
+ ]
+ , Layer.symbol "place-city-md-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 229 229 229 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor E.positionBottom
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.iconImage (str "dot-10")
+ ]
+ , Layer.symbol "place-city-lg-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 242 242 242 1 ), ( 9, E.rgba 229 229 229 1 ) ])
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-lg-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 242 242 242 1 ), ( 9, E.rgba 229 229 229 1 ) ])
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "marine-label-sm-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 100 ), ( 6, float 400 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-sm-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ ]
+ , Layer.symbol "marine-label-md-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 12 ), ( 5, float 20 ) ])
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-md-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 14 ), ( 5, float 20 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Point"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 81 81 81 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "state-label-sm"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 9
+ , Layer.filter (E.getProperty (str "area") |> E.lessThan (float 20000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 127 127 127 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 10 ), ( 9, float 14 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 6, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "state-label-md"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "area") |> E.lessThan (float 80000)
+ , E.getProperty (str "area") |> E.greaterThanOrEqual (float 20000)
+ ]
+ )
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 127 127 127 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 10 ), ( 8, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 5, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "state-label-lg"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThanOrEqual (float 80000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 127 127 127 1)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 10 ), ( 7, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textPadding (float 1)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 4, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "country-label-sm"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.greaterThanOrEqual (float 5))
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textColor (E.rgba 114 114 114 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 14 ), ( 9, float 22 ) ])
+ ]
+ , Layer.symbol "country-label-md"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 8
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ) ] false)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textColor (E.rgba 114 114 114 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "code"))) [ ( 2, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 10 ), ( 8, float 24 ) ])
+ ]
+ , Layer.symbol "country-label-lg"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor (E.rgba 25 25 25 0.75)
+ , Layer.textColor (E.rgba 114 114 114 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 5 ), ( 3, float 6 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 10 ), ( 6, float 24 ) ])
+ ]
+ ]
+ , sources = [ Source.vectorFromUrl "composite" "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7" ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/dark-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Mapbox Dark"
+ ]
+ }
diff --git a/examples/Styles/Light.elm b/examples/Styles/Light.elm
new file mode 100644
index 0000000..e487f36
--- /dev/null
+++ b/examples/Styles/Light.elm
@@ -0,0 +1,2906 @@
+module Styles.Light exposing (style)
+
+import Mapbox.Expression as E exposing (false, float, str, true)
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background" [ Layer.backgroundColor (E.rgba 245 245 243 1) ]
+ , Layer.fill "landcover_wood"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "wood"))
+ , Layer.sourceLayer "landcover"
+ , Layer.fillColor (E.rgba 226 226 226 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_scrub"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "scrub"))
+ , Layer.sourceLayer "landcover"
+ , Layer.fillColor (E.rgba 226 226 226 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_grass"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "grass"))
+ , Layer.sourceLayer "landcover"
+ , Layer.fillColor (E.rgba 226 226 226 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_crop"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "crop"))
+ , Layer.sourceLayer "landcover"
+ , Layer.fillColor (E.rgba 226 226 226 1)
+ , Layer.fillOpacity (float 0.1)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "national_park"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.fillColor (E.rgba 236 238 237 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 0.5 ) ])
+ ]
+ , Layer.fill "parks"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "park"))
+ , Layer.fillColor (E.rgba 236 238 237 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 0.75 ) ])
+ ]
+ , Layer.fill "pitch"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.fillColor (E.rgba 236 238 237 1)
+ ]
+ , Layer.fill "industrial"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "industrial"))
+ , Layer.fillColor (E.rgba 236 238 237 1)
+ ]
+ , Layer.fill "sand"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "sand"))
+ , Layer.fillColor (E.rgba 236 238 237 1)
+ ]
+ , Layer.fill "hillshade_highlight_bright"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 94))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.08 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_highlight_med"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 90))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.08 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_faint"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 89))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.033 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_med"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 78))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.033 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_dark"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 67))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_extreme"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 56))
+ , Layer.sourceLayer "hillshade"
+ , Layer.fillColor (E.rgba 89 89 89 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.line "waterway-river-canal"
+ "composite"
+ [ Layer.minzoom 8
+ , Layer.filter
+ (E.any
+ [ E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "canal")
+ )
+ ]
+ false
+ , E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "river")
+ )
+ ]
+ false
+ ]
+ )
+ , Layer.sourceLayer "waterway"
+ , Layer.lineColor (E.rgba 203 211 212 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.3) [ ( 8.5, float 0.1 ), ( 20, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, float 0 ), ( 8.5, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapButt [ ( 11, E.lineCapRound ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.fill "water shadow"
+ "composite"
+ [ Layer.sourceLayer "water"
+ , Layer.fillColor (E.rgba 181 190 190 1)
+ , Layer.fillTranslate (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 7, E.floats [ 0, 0 ] ), ( 16, E.floats [ -1, -1 ] ) ])
+ , Layer.fillTranslateAnchor E.anchorViewport
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "water" "composite" [ Layer.sourceLayer "water", Layer.fillColor (E.rgba 202 210 210 1) ]
+ , Layer.fill "barrier_line-land-polygon"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.fillColor (E.rgba 240 245 243 1)
+ ]
+ , Layer.line "barrier_line-land-line"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.99) [ ( 14, float 0.75 ), ( 20, float 40 ) ])
+ , Layer.lineColor (E.rgba 240 245 243 1)
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "aeroway-polygon"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter (E.all [ E.getProperty (str "type") |> E.notEqual (str "apron"), E.geometryType |> E.isEqual (str "Polygon") ])
+ , Layer.sourceLayer "aeroway"
+ , Layer.fillColor (E.rgba 247 247 247 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.5, float 1 ) ])
+ ]
+ , Layer.line "aeroway-runway"
+ "composite"
+ [ Layer.minzoom 9
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "runway") ])
+ , Layer.sourceLayer "aeroway"
+ , Layer.lineColor (E.rgba 242 242 242 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 9, float 1 ), ( 18, float 80 ) ])
+ ]
+ , Layer.line "aeroway-taxiway"
+ "composite"
+ [ Layer.minzoom 9
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "taxiway")
+ ]
+ )
+ , Layer.sourceLayer "aeroway"
+ , Layer.lineColor (E.rgba 242 242 242 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 0.5 ), ( 18, float 20 ) ])
+ ]
+ , Layer.fill "building"
+ "composite"
+ [ Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.sourceLayer "building"
+ , Layer.fillColor (E.rgba 233 233 230 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ , Layer.fillOutlineColor (E.rgba 222 222 220 1)
+ ]
+ , Layer.line "tunnel-street-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track-case"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 223 229 230 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-construction"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "tunnel-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "steps")
+ , E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineColor (E.rgba 216 216 216 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 216 216 216 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-pedestrian"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineColor (E.rgba 222 226 226 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian-case"
+ "composite"
+ [ Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-track-case"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-main-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link-case"
+ "composite"
+ [ Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 7, float 0.4 ), ( 9, float 0.5 ), ( 10, float 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk-case"
+ "composite"
+ [ Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 9, float 1.4 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 6.1, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 219 224 222 1 ), ( 11, E.rgba 232 237 235 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-construction"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "road-sidewalks"
+ "composite"
+ [ Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.matchesStr [ ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "crossing", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "path")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link"
+ "composite"
+ [ Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian"
+ "composite"
+ [ Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-track"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk"
+ "composite"
+ [ Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 9, float 1.4 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway"
+ "composite"
+ [ Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-low"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track-case"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-case"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.lessThanOrEqual (float 1)
+ , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-construction"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "bridge-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "steps")
+ , E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track"
+ "composite"
+ [ Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2-case"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2-case copy"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 7, float 0.5 ), ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 232 237 235 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.sourceLayer "road"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-3-4-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maritime") |> E.isEqual (float 0)
+ , E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ ]
+ )
+ , Layer.lineColor (E.rgba 214 214 214 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 0 ), ( 7, float 0.5 ), ( 8, float 0.75 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 8, float 3 ) ])
+ , Layer.lineJoin E.lineJoinBevel
+ ]
+ , Layer.line "admin-2-boundaries-bg"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.sourceLayer "admin"
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 10 ) ])
+ , Layer.lineColor (E.rgba 214 214 214 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 4, float 0.5 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "admin-3-4-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maritime") |> E.isEqual (float 0)
+ , E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ ]
+ )
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 2, 0 ]) [ ( 7, E.floats [ 2, 2, 6, 2 ] ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.75 ), ( 12, float 1.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 2, float 0 ), ( 3, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, E.rgba 204 204 204 1 ), ( 5, E.rgba 178 178 178 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.sourceLayer "admin"
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, E.rgba 178 178 178 1 ), ( 4, E.rgba 158 158 158 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries-dispute"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 1)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.sourceLayer "admin"
+ , Layer.lineDasharray (E.floats [ 1.5, 1.5 ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, E.rgba 178 178 178 1 ), ( 4, E.rgba 158 158 158 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "waterway-label"
+ "composite"
+ [ Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.sourceLayer "waterway_label"
+ , Layer.textHaloWidth (float 0)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 30)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 12 ), ( 18, float 16 ) ])
+ ]
+ , Layer.symbol "poi-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 148 148 148 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 148 148 148 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "road-label-small"
+ "composite"
+ [ Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "ferry", false )
+ , ( "golf", false )
+ , ( "link", false )
+ , ( "motorway", false )
+ , ( "path", false )
+ , ( "pedestrian", false )
+ , ( "primary", false )
+ , ( "secondary", false )
+ , ( "street", false )
+ , ( "street_limited", false )
+ , ( "tertiary", false )
+ , ( "track", false )
+ , ( "trunk", false )
+ ]
+ true
+ , E.geometryType |> E.isEqual (str "LineString")
+ ]
+ )
+ , Layer.sourceLayer "road_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 10 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 500)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-medium"
+ "composite"
+ [ Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "pedestrian", true ), ( "street", true ), ( "street_limited", true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "road_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 10 ), ( 20, float 14 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 500)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-large"
+ "composite"
+ [ Layer.minzoom 12
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", true ), ( "primary", true ), ( "secondary", true ), ( "tertiary", true ), ( "trunk", true ) ] false
+ )
+ , Layer.sourceLayer "road_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 400)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "poi-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 148 148 148 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 148 148 148 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "water-label"
+ "composite"
+ [ Layer.minzoom 5
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThan (float 10000))
+ , Layer.sourceLayer "water_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 13 ), ( 18, float 18 ) ])
+ ]
+ , Layer.symbol "poi-parks-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 147 147 147 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 147 147 147 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 12 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "airport-label"
+ "composite"
+ [ Layer.minzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
+ , Layer.sourceLayer "airport_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 12 ), ( 18, float 18 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.75 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 14, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 9)
+ ]
+ , Layer.symbol "place-islets-archipelago-aboriginal"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter
+ (E.getProperty (str "type")
+ |> E.matchesStr [ ( "aboriginal_lands", true ), ( "archipelago", true ), ( "islet", true ) ] false
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "place-neighbourhood"
+ "composite"
+ [ Layer.minzoom 12
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "neighbourhood"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 158 158 158 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 16, float 16 ) ])
+ ]
+ , Layer.symbol "place-suburb"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "suburb"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 158 158 158 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 11 ), ( 15, float 18 ) ])
+ ]
+ , Layer.symbol "place-hamlet"
+ "composite"
+ [ Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "hamlet"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 158 158 158 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11.5 ), ( 15, float 16 ) ])
+ ]
+ , Layer.symbol "place-village"
+ "composite"
+ [ Layer.minzoom 11
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "village"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, E.rgba 158 158 158 1 ), ( 11, E.rgba 140 140 140 1 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11.5 ), ( 16, float 18 ) ])
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ ]
+ , Layer.symbol "place-town"
+ "composite"
+ [ Layer.minzoom 7
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "town"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, E.rgba 158 158 158 1 ), ( 11, E.rgba 140 140 140 1 ) ])
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 11.5 ), ( 15, float 20 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 12, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-islands"
+ "composite"
+ [ Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "island"))
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-sm"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank")
+ |> E.matchesFloat [ ( 0, false ), ( 1, false ), ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 12 ), ( 14, float 22 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-md-s"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.isEqual (str "city")
+ , E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.1 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.iconImage (str "dot-10")
+ ]
+ , Layer.symbol "place-city-md-n"
+ "composite"
+ [ Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.isEqual (str "city")
+ , E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor E.positionBottom
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.iconImage (str "dot-10")
+ ]
+ , Layer.symbol "place-city-lg-s"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ , E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.iconSize (float 1)
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-lg-n"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ , E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "place_label"
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.iconSize (float 1)
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "marine-label-sm-ln"
+ "composite"
+ [ Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 100 ), ( 6, float 400 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-sm-pt"
+ "composite"
+ [ Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ ]
+ , Layer.symbol "marine-label-md-ln"
+ "composite"
+ [ Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 12 ), ( 5, float 20 ) ])
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-md-pt"
+ "composite"
+ [ Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 14 ), ( 5, float 20 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-ln"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPitchAlignment E.anchorViewport
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-pt"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Point"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.sourceLayer "marine_label"
+ , Layer.textColor (E.rgba 120 136 138 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "state-label-sm"
+ "composite"
+ [ Layer.minzoom 3
+ , Layer.maxzoom 9
+ , Layer.filter (E.getProperty (str "area") |> E.lessThan (float 20000))
+ , Layer.sourceLayer "state_label"
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 168 168 168 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 10 ), ( 9, float 14 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 6, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "state-label-md"
+ "composite"
+ [ Layer.minzoom 3
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "area") |> E.lessThan (float 80000)
+ , E.getProperty (str "area") |> E.greaterThanOrEqual (float 20000)
+ ]
+ )
+ , Layer.sourceLayer "state_label"
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 168 168 168 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 10 ), ( 8, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 5, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "state-label-lg"
+ "composite"
+ [ Layer.minzoom 3
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThanOrEqual (float 80000))
+ , Layer.sourceLayer "state_label"
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 168 168 168 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 10 ), ( 7, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textPadding (float 1)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 4, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "country-label-sm"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.greaterThanOrEqual (float 5))
+ , Layer.sourceLayer "country_label"
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 14 ), ( 9, float 22 ) ])
+ ]
+ , Layer.symbol "country-label-md"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 8
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ) ] false)
+ , Layer.sourceLayer "country_label"
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "code"))) [ ( 2, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 10 ), ( 8, float 24 ) ])
+ ]
+ , Layer.symbol "country-label-lg"
+ "composite"
+ [ Layer.minzoom 1
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false)
+ , Layer.sourceLayer "country_label"
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textColor (E.rgba 107 107 107 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 5 ), ( 3, float 6 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 10 ), ( 6, float 24 ) ])
+ ]
+ ]
+ , sources = [ Source.vectorFromUrl "composite" "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7" ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/light-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Light"
+ , Style.defaultZoomLevel 10
+ ]
+ }
diff --git a/examples/Styles/Outdoors.elm b/examples/Styles/Outdoors.elm
new file mode 100644
index 0000000..1d29ce3
--- /dev/null
+++ b/examples/Styles/Outdoors.elm
@@ -0,0 +1,4267 @@
+module Styles.Outdoors exposing (style)
+
+import Mapbox.Expression as E exposing (false, float, str, true)
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background"
+ [ Layer.backgroundColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, E.rgba 239 233 224 1 ), ( 13, E.rgba 230 227 223 1 ) ])
+ ]
+ , Layer.fill "landcover_crop"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "crop"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 12, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_grass"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "grass"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 12, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_scrub"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "scrub"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 12, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_wood"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "wood"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 12, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_snow"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (E.rgba 255 250 250 1))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (float 0.2)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "national_park"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.fillColor (E.rgba 181 229 157 1)
+ , Layer.fillOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 5.5, float 0.75 ), ( 9, float 0.75 ), ( 10, float 0.35 ) ]
+ )
+ ]
+ , Layer.fill "scrub"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "scrub"))
+ , Layer.fillColor (E.rgba 202 215 161 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0 ), ( 15, float 0.2 ) ])
+ ]
+ , Layer.fill "grass"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "grass"))
+ , Layer.fillColor (E.rgba 202 215 161 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0 ), ( 15, float 0.4 ) ])
+ ]
+ , Layer.fill "wood"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 6
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "wood"))
+ , Layer.fillColor (E.rgba 202 215 161 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0 ), ( 15, float 0.5 ) ])
+ ]
+ , Layer.fill "agriculture"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 11
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "agriculture"))
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 14, float 0.75 ) ])
+ , Layer.fillColor (E.rgba 215 224 188 1)
+ , Layer.fillOutlineColor (E.rgba 186 199 147 1)
+ ]
+ , Layer.line "national_park-tint-band"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.lineColor (E.rgba 174 229 147 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.4) [ ( 9, float 1 ), ( 14, float 8 ) ])
+ , Layer.lineOffset (E.zoom |> E.interpolate (E.Exponential 1.4) [ ( 9, float 0 ), ( 14, float -2.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0 ), ( 10, float 0.75 ) ])
+ , Layer.lineBlur (float 3)
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "national_park-outline"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, E.rgba 168 217 144 1 ), ( 14, E.rgba 159 204 137 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0.75 ), ( 12, float 1 ) ])
+ , Layer.lineOffset (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0 ), ( 10, float 1 ) ])
+ ]
+ , Layer.fill "hospital"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "hospital"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 234 209 217 1 ), ( 16, E.rgba 244 209 221 1 ) ]
+ )
+ ]
+ , Layer.fill "school"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "school"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 229 221 183 1 ), ( 16, E.rgba 239 231 188 1 ) ]
+ )
+ ]
+ , Layer.fill "park"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "park")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "garden", false ), ( "golf_course", false ), ( "playground", false ), ( "zoo", false ) ] true
+ ]
+ )
+ , Layer.fillColor (E.rgba 181 229 157 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 1 ) ])
+ ]
+ , Layer.fill "other-green-areas"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "park")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "garden", true ), ( "golf_course", true ), ( "playground", true ), ( "zoo", true ) ] false
+ ]
+ )
+ , Layer.fillColor (E.rgba 197 235 177 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 1 ) ])
+ ]
+ , Layer.fill "glacier"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "glacier"))
+ , Layer.fillColor (E.rgba 224 243 249 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 0 ), ( 10, float 0.5 ) ])
+ ]
+ , Layer.fill "pitch"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.fillColor (E.rgba 170 224 142 1)
+ ]
+ , Layer.line "pitch-line"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.lineColor (E.rgba 225 237 190 1)
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.fill "cemetery"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "cemetery"))
+ , Layer.fillColor (E.rgba 215 224 188 1)
+ ]
+ , Layer.fill "industrial"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "industrial"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 213 215 224 1 ), ( 16, E.rgba 218 221 235 1 ) ]
+ )
+ ]
+ , Layer.fill "sand"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "sand"))
+ , Layer.fillColor (E.rgba 237 237 206 1)
+ ]
+ , Layer.line "contour-line"
+ "composite"
+ [ Layer.sourceLayer "contour"
+ , Layer.minzoom 11
+ , Layer.filter (E.getProperty (str "index") |> E.matchesFloat [ ( 5, false ), ( 10, false ) ] true)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0.15 ), ( 12, float 0.3 ) ])
+ , Layer.lineColor (E.rgba 33 102 0 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0.5 ), ( 16, float 0.8 ) ])
+ , Layer.lineOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 1 ), ( 16, float 1.6 ) ])
+ ]
+ , Layer.line "contour-line-index"
+ "composite"
+ [ Layer.sourceLayer "contour"
+ , Layer.minzoom 11
+ , Layer.filter (E.getProperty (str "index") |> E.matchesFloat [ ( 5, true ), ( 10, true ) ] false)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0.25 ), ( 12, float 0.5 ) ])
+ , Layer.lineColor (E.rgba 33 102 0 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0.6 ), ( 16, float 1.2 ) ])
+ , Layer.lineOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0.6 ), ( 16, float 1.2 ) ])
+ ]
+ , Layer.fill "hillshade_highlight_bright"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 18
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 94))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.15 ), ( 18, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_highlight_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 90))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.15 ), ( 18, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_faint"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 17
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 89))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.07 ), ( 17, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 78))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.07 ), ( 17, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_dark"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 67))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.08 ), ( 17, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_extreme"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 17
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 56))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0.08 ), ( 17, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.line "waterway-river-canal-shadow"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 8
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.lineColor (E.rgba 109 164 242 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.3) [ ( 8.5, float 0.4 ), ( 20, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, float 0 ), ( 8.5, float 1 ) ])
+ , Layer.lineTranslate (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 7, E.floats [ 0, 0 ] ), ( 16, E.floats [ -1, -1 ] ) ])
+ , Layer.lineTranslateAnchor E.anchorViewport
+ , Layer.lineCap (E.zoom |> E.step E.lineCapButt [ ( 11, E.lineCapRound ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "waterway-river-canal"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 8
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.lineColor (E.rgba 140 202 247 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.3) [ ( 8.5, float 0.4 ), ( 20, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, float 0 ), ( 8.5, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapButt [ ( 11, E.lineCapRound ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "waterway-small"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 13
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", false ), ( "river", false ) ] true)
+ , Layer.lineColor (E.rgba 140 202 247 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.35) [ ( 13.5, float 0.4 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "water-shadow"
+ "composite"
+ [ Layer.sourceLayer "water"
+ , Layer.fillColor (E.rgba 109 164 242 1)
+ , Layer.fillTranslate (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 7, E.floats [ 0, 0 ] ), ( 16, E.floats [ -1, -1 ] ) ])
+ , Layer.fillTranslateAnchor E.anchorViewport
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "water" "composite" [ Layer.sourceLayer "water", Layer.fillColor (E.rgba 117 207 239 1) ]
+ , Layer.fill "wetlands"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "wetland", true ), ( "wetland_noveg", true ) ] false)
+ , Layer.fillColor (E.rgba 160 212 217 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 0.25 ), ( 10.5, float 0.15 ) ])
+ ]
+ , Layer.fill "wetlands-pattern"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "wetland", true ), ( "wetland_noveg", true ) ] false)
+ , Layer.fillColor (E.rgba 160 212 217 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 0 ), ( 10.5, float 1 ) ])
+ , Layer.fillPattern (str "wetland")
+ , Layer.fillTranslateAnchor E.anchorViewport
+ ]
+ , Layer.fill "barrier_line-land-polygon"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.fillColor (E.rgba 230 227 223 1)
+ ]
+ , Layer.line "barrier_line-land-line"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.99) [ ( 14, float 0.75 ), ( 20, float 40 ) ])
+ , Layer.lineColor (E.rgba 230 227 223 1)
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "aeroway-polygon"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 11
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "type") |> E.notEqual (str "apron") ])
+ , Layer.fillColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.5, float 1 ) ])
+ ]
+ , Layer.line "aeroway-runway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "runway") ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 9, float 1 ), ( 18, float 80 ) ])
+ ]
+ , Layer.line "aeroway-taxiway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "taxiway")
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 0.5 ), ( 18, float 20 ) ])
+ ]
+ , Layer.line "building-line"
+ "composite"
+ [ Layer.sourceLayer "building"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.lineColor (E.rgba 204 201 198 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 0.75 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ ]
+ , Layer.fill "building"
+ "composite"
+ [ Layer.sourceLayer "building"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.fillColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 227 224 221 1 ), ( 16, E.rgba 219 217 213 1 ) ])
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ , Layer.fillOutlineColor (E.rgba 204 201 198 1)
+ ]
+ , Layer.line "tunnel-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "service", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "tunnel-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "cycleway", false ), ( "piste", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 3, 0.4 ] ), ( 16, E.floats [ 3, 0.35 ] ), ( 17, E.floats [ 3, 0.35 ] ) ]
+ )
+ , Layer.lineColor (E.rgba 245 242 238 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-cycleway-piste"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "cycleway", true ), ( "piste", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 3, 0.4 ] ), ( 16, E.floats [ 3, 0.35 ] ), ( 17, E.floats [ 3, 0.35 ] ) ]
+ )
+ , Layer.lineColor (E.rgba 245 242 238 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 245 242 238 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 1.75, 0.4 ] ), ( 16, E.floats [ 0.75, 0.4 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 221 155 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 201 170 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "service", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "tunnel-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 242 221 155 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineColor (E.rgba 242 201 170 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconOpacity (float 0.5)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "cliffs"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "cliff"))
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0 ), ( 15.25, float 1 ) ])
+ , Layer.lineWidth (float 10)
+ , Layer.linePattern (str "cliff")
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "ferry"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "ferry") ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 91 172 229 1 ), ( 17, E.rgba 91 114 229 1 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 13, E.floats [ 12, 4 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "ferry-auto"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "ferry_auto")
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 91 172 229 1 ), ( 17, E.rgba 91 114 229 1 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "corridor", false ), ( "crossing", false ), ( "piste", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2.5 ), ( 18, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 17, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-piste-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "piste")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineColor (E.rgba 99 123 242 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-sidewalk-corridor-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "corridor", true ), ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 0.25 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2.5 ), ( 18, float 8 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 17, float 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 0.25 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "service", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9.99, float 0 ), ( 10, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9.99, float 0 ), ( 10, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 6.1, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "road-sidewalk-corridor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "corridor", true ), ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 3, 0.4 ] ), ( 16, E.floats [ 3, 0.35 ] ), ( 17, E.floats [ 3, 0.35 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path-smooth"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "bridleway", true ), ( "footway", true ), ( "path", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 3, 0.4 ] ), ( 16, E.floats [ 3, 0.35 ] ), ( 17, E.floats [ 3, 0.35 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path-rough"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "hiking", true ), ( "mountain_bike", true ), ( "trail", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 1.75, 0.4 ] ), ( 16, E.floats [ 1, 0.4 ] ), ( 17, E.floats [ 1, 0.35 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-cycleway-piste"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.matchesStr [ ( "cycleway", true ), ( "piste", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 1.75, 0.4 ] ), ( 16, E.floats [ 0.75, 0.4 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 203 117 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 171 127 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.fill "road-pedestrian-polygon-fill"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Polygon")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "path", true ), ( "pedestrian", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 16, E.rgba 237 238 242 1 ), ( 16.25, E.rgba 247 248 252 1 ) ]
+ )
+ , Layer.fillOutlineColor (E.rgba 216 219 232 1)
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "road-pedestrian-polygon-pattern"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Polygon")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "path", true ), ( "pedestrian", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOutlineColor (E.rgba 215 212 207 1)
+ , Layer.fillPattern (str "pedestrian-polygon")
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ ]
+ , Layer.fill "road-polygon"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Polygon")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", false ), ( "path", false ), ( "pedestrian", false ), ( "trunk", false ) ] true
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOutlineColor (E.rgba 179 183 203 1)
+ ]
+ , Layer.line "road-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "service", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 239 233 224 1 ), ( 8, E.rgba 255 255 255 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 239 233 224 1 ), ( 8, E.rgba 255 255 255 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.line "road-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, E.rgba 255 255 255 1 ), ( 6.1, E.rgba 234 196 71 1 ), ( 9, E.rgba 229 203 117 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 242 146 73 1 ), ( 9, E.rgba 229 171 127 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail-tracks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 4 ), ( 20, float 8 ) ])
+ , Layer.lineDasharray (E.floats [ 0.1, 15 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.75, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconOpacity (float 0.5)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.line "hedges"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.minzoom 16
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "hedge"))
+ , Layer.lineColor (E.rgba 163 223 133 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 1 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 2, 5, 2, 1, 2 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "fences"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.minzoom 16
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "fence"))
+ , Layer.lineColor (E.rgba 204 199 183 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 1 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 2, 5, 2, 1, 2 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "gates"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.minzoom 17
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "gate"))
+ , Layer.lineColor (E.rgba 204 199 183 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 1 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (float 0.5)
+ , Layer.lineDasharray (E.floats [ 1, 2, 5, 2, 1, 2 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-path-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "piste", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2.5 ), ( 18, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 17, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-piste-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "piste")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineColor (E.rgba 88 163 217 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2.5 ), ( 18, float 8 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 17, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 204 170 0 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "service", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "bridge-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "cycleway", false ), ( "piste", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 3, 0.4 ] ), ( 16, E.floats [ 3, 0.35 ] ), ( 17, E.floats [ 3, 0.35 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-cycleway-piste"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "cycleway", true ), ( "piste", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 4, 0.4 ]) [ ( 15, E.floats [ 1.75, 0.4 ] ), ( 16, E.floats [ 0.75, 0.4 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 203 117 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 171 127 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "track")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "bridge-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 229 203 117 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 229 171 127 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail-tracks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 4 ), ( 20, float 8 ) ])
+ , Layer.lineDasharray (E.floats [ 0.1, 15 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.75, float 0 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 203 117 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 229 171 127 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 229 203 117 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 229 171 127 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconOpacity (float 0.5)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "aerialway-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class") |> E.isEqual (str "aerialway")
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2.5 ), ( 20, float 3 ) ])
+ , Layer.lineBlur (float 0.5)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "aerialway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class") |> E.isEqual (str "aerialway")
+ ]
+ )
+ , Layer.lineColor (E.rgba 70 71 76 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-3-4-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 230 227 223 1 ), ( 16, E.rgba 217 221 241 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 3.75 ), ( 12, float 5.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0 ), ( 8, float 0.75 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 8, float 3 ) ])
+ , Layer.lineJoin E.lineJoinBevel
+ ]
+ , Layer.line "admin-2-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 8 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, E.rgba 230 227 223 1 ), ( 8, E.rgba 217 221 241 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 4, float 0.5 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "admin-3-4-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 2, 0 ]) [ ( 7, E.floats [ 2, 2, 6, 2 ] ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.75 ), ( 12, float 1.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 2, float 0 ), ( 3, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, E.rgba 188 190 204 1 ), ( 7, E.rgba 150 152 165 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 120 123 140 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries-dispute"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 1)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.floats [ 1.5, 1.5 ])
+ , Layer.lineColor (E.rgba 120 123 140 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "housenum-label"
+ "composite"
+ [ Layer.sourceLayer "housenum_label"
+ , Layer.minzoom 17
+ , Layer.textColor (E.rgba 177 176 174 1)
+ , Layer.textHaloColor (E.rgba 219 217 213 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "house_num")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 4)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (float 9.5)
+ ]
+ , Layer.symbol "contour-label"
+ "composite"
+ [ Layer.sourceLayer "contour"
+ , Layer.minzoom 11
+ , Layer.filter (E.getProperty (str "index") |> E.matchesFloat [ ( 5, true ), ( 10, true ) ] false)
+ , Layer.textColor (E.rgba 57 114 28 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.rgba 255 255 255 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ele") |> E.append (str " m")))
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textMaxAngle (float 25)
+ , Layer.textPadding (float 5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 9.5 ), ( 20, float 12 ) ])
+ ]
+ , Layer.symbol "waterway-label"
+ "composite"
+ [ Layer.sourceLayer "waterway_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloColor (E.rgba 117 207 239 1)
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textMaxAngle (float 30)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 12 ), ( 18, float 16 ) ])
+ ]
+ , Layer.symbol "poi-relevant-scalerank4-l15"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 17
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.greaterThanOrEqual (float 15)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "amusement-park", true )
+ , ( "aquarium", true )
+ , ( "attraction", true )
+ , ( "bakery", true )
+ , ( "bank", true )
+ , ( "bar", true )
+ , ( "beer", true )
+ , ( "bus", true )
+ , ( "cafe", true )
+ , ( "castle", true )
+ , ( "college", true )
+ , ( "doctor", true )
+ , ( "fast-food", true )
+ , ( "ferry", true )
+ , ( "fire-station", true )
+ , ( "fuel", true )
+ , ( "grocery", true )
+ , ( "harbor", true )
+ , ( "hospital", true )
+ , ( "ice-cream", true )
+ , ( "lodging", true )
+ , ( "marker", true )
+ , ( "monument", true )
+ , ( "museum", true )
+ , ( "pharmacy", true )
+ , ( "police", true )
+ , ( "post", true )
+ , ( "restaurant", true )
+ , ( "rocket", true )
+ , ( "stadium", true )
+ , ( "swimming", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-relevant-scalerank4-l1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 14)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "amusement-park", true )
+ , ( "aquarium", true )
+ , ( "attraction", true )
+ , ( "bakery", true )
+ , ( "bank", true )
+ , ( "bar", true )
+ , ( "beer", true )
+ , ( "bus", true )
+ , ( "cafe", true )
+ , ( "castle", true )
+ , ( "college", true )
+ , ( "doctor", true )
+ , ( "fast-food", true )
+ , ( "ferry", true )
+ , ( "fire-station", true )
+ , ( "fuel", true )
+ , ( "grocery", true )
+ , ( "harbor", true )
+ , ( "hospital", true )
+ , ( "ice-cream", true )
+ , ( "lodging", true )
+ , ( "marker", true )
+ , ( "monument", true )
+ , ( "museum", true )
+ , ( "pharmacy", true )
+ , ( "police", true )
+ , ( "post", true )
+ , ( "restaurant", true )
+ , ( "rocket", true )
+ , ( "stadium", true )
+ , ( "swimming", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks_scalerank4"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "road-label-small"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "aerialway", false )
+ , ( "link", false )
+ , ( "motorway", false )
+ , ( "path", false )
+ , ( "pedestrian", false )
+ , ( "primary", false )
+ , ( "secondary", false )
+ , ( "street", false )
+ , ( "street_limited", false )
+ , ( "tertiary", false )
+ , ( "trunk", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloBlur (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 10 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-medium"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "aerialway", true )
+ , ( "link", true )
+ , ( "path", true )
+ , ( "pedestrian", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 10 ), ( 20, float 14 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-large"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", true ), ( "primary", true ), ( "secondary", true ), ( "tertiary", true ), ( "trunk", true ) ] false
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-shields-black"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", false )
+ , ( "at-motorway", false )
+ , ( "at-state-b", false )
+ , ( "bg-motorway", false )
+ , ( "bg-national", false )
+ , ( "ch-main", false )
+ , ( "ch-motorway", false )
+ , ( "cz-motorway", false )
+ , ( "cz-road", false )
+ , ( "de-motorway", false )
+ , ( "e-road", false )
+ , ( "fi-main", false )
+ , ( "gr-motorway", false )
+ , ( "gr-national", false )
+ , ( "hr-motorway", false )
+ , ( "hr-state", false )
+ , ( "hu-main", false )
+ , ( "hu-motorway", false )
+ , ( "nz-state", false )
+ , ( "pl-expressway", false )
+ , ( "pl-motorway", false )
+ , ( "pl-national", false )
+ , ( "ro-county", false )
+ , ( "ro-motorway", false )
+ , ( "ro-national", false )
+ , ( "rs-motorway", false )
+ , ( "rs-state-1b", false )
+ , ( "se-main", false )
+ , ( "si-expressway", false )
+ , ( "si-motorway", false )
+ , ( "sk-highway", false )
+ , ( "sk-road", false )
+ , ( "us-interstate", false )
+ , ( "us-interstate-business", false )
+ , ( "us-interstate-duplex", false )
+ , ( "us-interstate-truck", false )
+ , ( "za-metropolitan", false )
+ , ( "za-national", false )
+ , ( "za-provincial", false )
+ , ( "za-regional", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 74 81 114 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "road-shields-white"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", true )
+ , ( "at-motorway", true )
+ , ( "at-state-b", true )
+ , ( "bg-motorway", true )
+ , ( "bg-national", true )
+ , ( "ch-main", true )
+ , ( "ch-motorway", true )
+ , ( "cz-motorway", true )
+ , ( "cz-road", true )
+ , ( "de-motorway", true )
+ , ( "e-road", true )
+ , ( "fi-main", true )
+ , ( "gr-motorway", true )
+ , ( "gr-national", true )
+ , ( "hr-motorway", true )
+ , ( "hr-state", true )
+ , ( "hu-main", true )
+ , ( "hu-motorway", true )
+ , ( "nz-state", true )
+ , ( "pl-expressway", true )
+ , ( "pl-motorway", true )
+ , ( "pl-national", true )
+ , ( "ro-county", true )
+ , ( "ro-motorway", true )
+ , ( "ro-national", true )
+ , ( "rs-motorway", true )
+ , ( "rs-state-1b", true )
+ , ( "se-main", true )
+ , ( "si-expressway", true )
+ , ( "si-motorway", true )
+ , ( "sk-highway", true )
+ , ( "sk-road", true )
+ , ( "us-interstate", true )
+ , ( "us-interstate-business", true )
+ , ( "us-interstate-duplex", true )
+ , ( "us-interstate-truck", true )
+ , ( "za-metropolitan", true )
+ , ( "za-national", true )
+ , ( "za-provincial", true )
+ , ( "za-regional", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "motorway-junction"
+ "composite"
+ [ Layer.sourceLayer "motorway_junction"
+ , Layer.minzoom 14
+ , Layer.filter (E.getProperty (str "reflen") |> E.greaterThan (float 0))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textTranslate (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textSize (float 9)
+ , Layer.iconImage (str "motorway-exit-" |> E.append (E.getProperty (str "reflen")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ ]
+ , Layer.symbol "poi-outdoor-features"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "bicycle", true )
+ , ( "bicycle-share", true )
+ , ( "drinking-water", true )
+ , ( "information", true )
+ , ( "picnic-site", true )
+ , ( "toilet", true )
+ ]
+ false
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "mountain-peak-label"
+ "composite"
+ [ Layer.sourceLayer "mountain_peak_label"
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-15"))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "mountain-peak-label-with-elevation"
+ "composite"
+ [ Layer.sourceLayer "mountain_peak_label"
+ , Layer.filter (E.getProperty (str "elevation_m") |> E.greaterThan (float 0))
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-15"))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en") |> E.append (str ", ") |> E.append (E.getProperty (str "elevation_m")) |> E.append (str "m")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 15, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 15, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "rail-label"
+ "composite"
+ [ Layer.sourceLayer "rail_station_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "maki") |> E.notEqual (str "entrance"))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.iconHaloWidth (float 4)
+ , Layer.iconHaloColor (E.rgba 255 255 255 1)
+ , Layer.textOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.toString (E.getProperty (str "network")))
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.85 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.zoom |> E.step (E.toFormattedText (str "")) [ ( 13, E.toFormattedText (E.getProperty (str "name_en")) ) ])
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.iconPadding (float 0)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "water-label-sm"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "area") |> E.lessThanOrEqual (float 10000))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 13 ), ( 20, float 16 ) ])
+ ]
+ , Layer.symbol "water-label"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 5
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThan (float 10000))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 13 ), ( 18, float 18 ) ])
+ ]
+ , Layer.symbol "poi-parks-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "airport-label"
+ "composite"
+ [ Layer.sourceLayer "airport_label"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 12 ), ( 18, float 18 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.75 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "ref"))) [ ( 12, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 9)
+ ]
+ , Layer.symbol "place-islet-archipelago-aboriginal"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter
+ (E.getProperty (str "type")
+ |> E.matchesStr [ ( "aboriginal_lands", true ), ( "archipelago", true ), ( "islet", true ) ] false
+ )
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "place-neighbourhood"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "neighbourhood"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 16, float 16 ) ])
+ ]
+ , Layer.symbol "place-suburb"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "suburb"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 11 ), ( 15, float 18 ) ])
+ ]
+ , Layer.symbol "place-hamlet"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "hamlet"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11.5 ), ( 15, float 16 ) ])
+ ]
+ , Layer.symbol "place-village"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 8
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "village"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11.5 ), ( 16, float 18 ) ])
+ ]
+ , Layer.symbol "place-town"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 6
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "town"))
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 12, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.floats [ 0, -0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 11.5 ), ( 15, float 20 ) ])
+ ]
+ , Layer.symbol "place-island"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "island"))
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-sm"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank")
+ |> E.matchesFloat [ ( 0, false ), ( 1, false ), ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 12 ), ( 14, float 22 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.2 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-md-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.iconImage (str "dot-10")
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.1 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-md-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-10")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-lg-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-lg-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "marine-label-sm-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 100 ), ( 6, float 400 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-sm-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ ]
+ , Layer.symbol "marine-label-md-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 12 ), ( 5, float 20 ) ])
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-md-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 14 ), ( 5, float 20 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Point"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "state-label-sm"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 9
+ , Layer.filter (E.getProperty (str "area") |> E.lessThan (float 20000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 10 ), ( 9, float 14 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 6, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "state-label-md"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "area") |> E.lessThan (float 80000)
+ , E.getProperty (str "area") |> E.greaterThanOrEqual (float 20000)
+ ]
+ )
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 10 ), ( 8, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 5, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "state-label-lg"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThanOrEqual (float 80000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 10 ), ( 7, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textPadding (float 1)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 4, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "country-label-sm"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.greaterThanOrEqual (float 5))
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 14 ), ( 9, float 22 ) ])
+ ]
+ , Layer.symbol "country-label-md"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 8
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ) ] false)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "code"))) [ ( 2, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 10 ), ( 8, float 24 ) ])
+ ]
+ , Layer.symbol "country-label-lg"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 5 ), ( 3, float 6 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 10 ), ( 6, float 24 ) ])
+ ]
+ ]
+ , sources = [ Source.vectorFromUrl "composite" "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7" ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/outdoors-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Mapbox Outdoors"
+ ]
+ }
diff --git a/examples/Styles/Satellite.elm b/examples/Styles/Satellite.elm
new file mode 100644
index 0000000..77a7f06
--- /dev/null
+++ b/examples/Styles/Satellite.elm
@@ -0,0 +1,24 @@
+module Styles.Satellite exposing (style)
+
+import Mapbox.Expression as E
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background" [ Layer.backgroundColor (E.rgba 4 7 14 1) ]
+ , Layer.raster "satellite" "mapbox" [ Layer.sourceLayer "mapbox_satellite_full" ]
+ ]
+ , sources = [ Source.rasterFromUrl "mapbox" "mapbox://mapbox.satellite" ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/satellite-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Satellite"
+ ]
+ }
diff --git a/examples/Styles/SatelliteStreets.elm b/examples/Styles/SatelliteStreets.elm
new file mode 100644
index 0000000..b51050d
--- /dev/null
+++ b/examples/Styles/SatelliteStreets.elm
@@ -0,0 +1,2939 @@
+module Styles.SatelliteStreets exposing (style)
+
+import Mapbox.Expression as E exposing (false, float, str, true)
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background" [ Layer.backgroundColor (E.rgba 4 7 14 1) ]
+ , Layer.raster "mapbox-mapbox-satellite" "mapbox://mapbox.satellite" []
+ , Layer.line "tunnel-secondary-tertiary case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 242 232 232 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 242 232 232 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 0.5 ), ( 16, float 0.75 ), ( 18, float 0.35 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.25 ), ( 15, float 0.4 ), ( 16, float 0.75 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 242 232 232 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-pedestrian case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 249 247 244 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 1 ] ), ( 16, E.floats [ 1, 2 ] ) ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 143 141 141 1 ), ( 10, E.rgba 191 191 191 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.5 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.5 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 11.5, float 0 ), ( 12.5, float 0.65 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 212 210 210 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.iconImage (str "oneway-spaced-white-large")
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.iconImage (str "oneway-spaced-white-large")
+ ]
+ , Layer.line "tunnel-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 206 193 68 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconImage (str "oneway-spaced-white-large")
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 150)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "ferry"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "ferry") ])
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.5, float 0 ), ( 8, float 0.15 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 3.5, 2 ]) [ ( 14, E.floats [ 2, 1 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "ferry, auto"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "ferry_auto")
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.5, float 0 ), ( 8, float 0.15 ), ( 16, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "ferry-label"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "ferry"))
+ , Layer.textColor (E.rgba 247 248 252 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.rgba 7 7 7 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textHaloWidth (float 1.75)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textMaxWidth (float 7)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ ]
+ , Layer.line "road-link case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 143 141 141 1 ), ( 10, E.rgba 191 191 191 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 16, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, E.rgba 43 42 42 1 ), ( 14, E.rgba 137 137 132 1 ), ( 18, E.rgba 33 32 32 1 ) ]
+ )
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 7, float 0 ), ( 10, float 0.5 ), ( 14, float 1 ), ( 16, float 0 ) ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0.75 ), ( 12, float 0.65 ), ( 18, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 14, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0.5 ), ( 18, float 2 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 11, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 11, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "crossing", false ), ( "piste", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.25 ), ( 15, float 0.4 ), ( 16, float 0.75 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 184 172 64 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.25 ), ( 15, float 0.4 ), ( 16, float 0.75 ) ])
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 1 ] ), ( 16, E.floats [ 1, 2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "o")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.rgba 143 141 141 1 ), ( 10, E.rgba 191 191 191 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.25 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.5 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 11.5, float 0 ), ( 12.5, float 0.65 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "link", true ), ( "primary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 244 244 244 1 ), ( 10, E.rgba 212 210 210 1 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0.25 ), ( 8, float 0.6 ), ( 14, float 1 ), ( 16, float 0 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 12, float 1.75 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.line "road-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 206 193 68 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "bridge-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, E.rgba 43 42 42 1 ), ( 14, E.rgba 137 137 132 1 ), ( 18, E.rgba 33 32 32 1 ) ]
+ )
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 7, float 0 ), ( 10, float 0.5 ), ( 14, float 1 ), ( 16, float 0 ) ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0.75 ), ( 12, float 0.65 ), ( 18, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 14, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 16, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0.5 ), ( 18, float 2 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 11, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.25 ), ( 15, float 0.4 ), ( 16, float 0.75 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 184 172 64 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.25 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 14, float 0.5 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10.5, float 0.5 ), ( 12, float 4 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 43 42 42 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 11.5, float 0 ), ( 12.5, float 0.65 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 244 244 244 1 ), ( 10, E.rgba 212 210 210 1 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, float 0.25 ), ( 8, float 0.6 ), ( 14, float 1 ), ( 16, float 0 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.5 ), ( 12, float 1.75 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.line "bridge-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 5
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 206 193 68 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0.75 ), ( 12, float 0.65 ), ( 18, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 14, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 16, float 2 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 0.5 ), ( 8, float 0.85 ), ( 14, float 0.2 ), ( 16, float 0 ) ]
+ )
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 66 65 65 1 ), ( 12, E.rgba 79 78 78 1 ), ( 15, E.rgba 64 63 63 1 ) ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 16, float 2 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 184 172 64 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, E.rgba 206 193 68 1 ), ( 18, E.rgba 209 210 208 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 163 131 96 1 ), ( 14.5, E.rgba 208 145 76 1 ), ( 18, E.rgba 209 210 208 1 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 16, float 0 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 1 ), ( 12, float 2 ), ( 18, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapRound [ ( 12, E.lineCapButt ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-spaced-small") [ ( 17, str "oneway-spaced-large" ) ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "aerialway-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.any
+ [ E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "aerialway")
+ )
+ ]
+ false
+ , E.conditionally
+ [ ( E.typeof (E.getProperty (str "type")) |> E.isEqual (str "string")
+ , E.getProperty (str "type") |> E.isEqual (str "piste")
+ )
+ ]
+ false
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 115 113 113 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12.5, float 0 ), ( 14, float 0.25 ), ( 16, float 0.75 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.5 ), ( 18, float 2.5 ) ])
+ , Layer.lineBlur (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "aerialway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.any
+ [ E.conditionally
+ [ ( E.typeof (E.getProperty (str "class")) |> E.isEqual (str "string")
+ , E.getProperty (str "class") |> E.isEqual (str "aerialway")
+ )
+ ]
+ false
+ , E.conditionally
+ [ ( E.typeof (E.getProperty (str "type")) |> E.isEqual (str "string")
+ , E.getProperty (str "type") |> E.isEqual (str "piste")
+ )
+ ]
+ false
+ ]
+ ]
+ )
+ , Layer.lineColor (E.rgba 219 219 219 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0 ), ( 12.5, float 0.25 ), ( 16, float 0.75 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1 ), ( 18, float 2.5 ) ])
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 3.5, 2 ]) [ ( 22, E.floats [ 2, 1 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-3-4-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 0, E.rgba 155 183 132 0.77 ), ( 6, E.rgba 155 183 132 0.77 ), ( 8, E.rgba 57 99 22 0.77 ) ]
+ )
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 0.2 ), ( 8, float 0.35 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 2.5 ), ( 10, float 4.5 ) ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 8, float 3 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinBevel
+ ]
+ , Layer.line "admin-2-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 242 242 242 0.77)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 10 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 0.1 ), ( 8, float 0.35 ) ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 10, float 2 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "admin-3-4-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 0 0 0 0.72)
+ , Layer.lineDasharray (E.floats [ 5, 2.5 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 1 ), ( 12, float 0.5 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 1 ), ( 9, float 1.75 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-2-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 0 0 0 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 0.5 ), ( 6, float 0.75 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 0.75 ), ( 4, float 3 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-2-boundaries offset"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 235 233 233 0.72)
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineWidth
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 0, float 0.5 ), ( 4, float 0.75 ), ( 9, float 1.5 ), ( 12, float 2 ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 0.25 ), ( 4, float 0.5 ), ( 8, float 0.75 ) ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 1.5 ), ( 4, float 0.75 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-2-boundaries-dispute"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 1)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 0 0 0 1)
+ , Layer.lineDasharray (E.floats [ 4, 8 ])
+ , Layer.lineWidth (float 0.75)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 1 ), ( 12, float 0.75 ), ( 16, float 0 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "waterway-label"
+ "composite"
+ [ Layer.sourceLayer "waterway_label"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "canal", true ), ( "river", true ), ( "stream", true ) ] false
+ )
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0.5 ), ( 14, float 1.5 ) ])
+ , Layer.textHaloColor (E.rgba 22 22 22 1)
+ , Layer.textColor (E.rgba 117 207 240 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textMaxAngle (float 30)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 12 ), ( 18, float 16 ) ])
+ ]
+ , Layer.symbol "poi-scalerank4-l15"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.greaterThanOrEqual (float 15)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 42 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank4-l1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThan (float 14)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 42 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank4"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 135 204 101 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 46 45 45 1 ) ])
+ , Layer.iconOpacity (float 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage (E.zoom |> E.step (str "") [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium Italic", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 3)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 42 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 135 204 101 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 46 45 45 1 ) ])
+ , Layer.iconOpacity (float 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage (E.zoom |> E.step (str "") [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium Italic", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "road-label-small"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "ferry", false )
+ , ( "link", false )
+ , ( "motorway", false )
+ , ( "pedestrian", false )
+ , ( "primary", false )
+ , ( "secondary", false )
+ , ( "street", false )
+ , ( "street_limited", false )
+ , ( "tertiary", false )
+ , ( "trunk", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 41 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 10 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 14, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "road-label-medium"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "pedestrian", true ), ( "street", true ), ( "street_limited", true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 41 39 39 1 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 10 ), ( 20, float 14 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "road-label-large"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 41 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "road-label-xlarge"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", true ), ( "primary", true ), ( "trunk", true ) ] false
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 41 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "road-shields-black"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "motorway", true )
+ , ( "motorway_link", true )
+ , ( "primary", true )
+ , ( "secondary", true )
+ , ( "trunk", true )
+ ]
+ false
+ , E.getProperty (str "localrank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false
+ , E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", false )
+ , ( "at-motorway", false )
+ , ( "at-state-b", false )
+ , ( "bg-motorway", false )
+ , ( "bg-national", false )
+ , ( "ch-main", false )
+ , ( "ch-motorway", false )
+ , ( "cz-expressway", false )
+ , ( "cz-motorway", false )
+ , ( "cz-road", false )
+ , ( "de-motorway", false )
+ , ( "e-road", false )
+ , ( "fi-main", false )
+ , ( "gr-motorway", false )
+ , ( "gr-national", false )
+ , ( "hr-motorway", false )
+ , ( "hr-state", false )
+ , ( "hu-main", false )
+ , ( "hu-motorway", false )
+ , ( "nz-state", false )
+ , ( "pl-expressway", false )
+ , ( "pl-motorway", false )
+ , ( "pl-national", false )
+ , ( "ro-county", false )
+ , ( "ro-motorway", false )
+ , ( "ro-national", false )
+ , ( "rs-motorway", false )
+ , ( "rs-state-1b", false )
+ , ( "se-main", false )
+ , ( "si-expressway", false )
+ , ( "si-motorway", false )
+ , ( "sk-highway", false )
+ , ( "sk-road", false )
+ , ( "us-interstate", false )
+ , ( "us-interstate-business", false )
+ , ( "us-interstate-duplex", false )
+ , ( "us-interstate-truck", false )
+ , ( "za-metropolitan", false )
+ , ( "za-national", false )
+ , ( "za-provincial", false )
+ , ( "za-regional", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "road-shields-white"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "motorway", true )
+ , ( "motorway_link", true )
+ , ( "primary", true )
+ , ( "secondary", true )
+ , ( "trunk", true )
+ ]
+ false
+ , E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", true )
+ , ( "at-motorway", true )
+ , ( "at-state-b", true )
+ , ( "bg-motorway", true )
+ , ( "bg-national", true )
+ , ( "ch-main", true )
+ , ( "ch-motorway", true )
+ , ( "cz-expressway", true )
+ , ( "cz-motorway", true )
+ , ( "cz-road", true )
+ , ( "de-motorway", true )
+ , ( "e-road", true )
+ , ( "fi-main", true )
+ , ( "gr-motorway", true )
+ , ( "gr-national", true )
+ , ( "hr-motorway", true )
+ , ( "hr-state", true )
+ , ( "hu-main", true )
+ , ( "hu-motorway", true )
+ , ( "nz-state", true )
+ , ( "pl-expressway", true )
+ , ( "pl-motorway", true )
+ , ( "pl-national", true )
+ , ( "ro-county", true )
+ , ( "ro-motorway", true )
+ , ( "ro-national", true )
+ , ( "rs-motorway", true )
+ , ( "rs-state-1b", true )
+ , ( "se-main", true )
+ , ( "si-expressway", true )
+ , ( "si-motorway", true )
+ , ( "sk-highway", true )
+ , ( "sk-road", true )
+ , ( "us-interstate", true )
+ , ( "us-interstate-business", true )
+ , ( "us-interstate-duplex", true )
+ , ( "us-interstate-truck", true )
+ , ( "za-metropolitan", true )
+ , ( "za-national", true )
+ , ( "za-provincial", true )
+ , ( "za-regional", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "motorway-junction"
+ "composite"
+ [ Layer.sourceLayer "motorway_junction"
+ , Layer.minzoom 14
+ , Layer.filter (E.getProperty (str "reflen") |> E.greaterThan (float 0))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textTranslate (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textSize (float 9)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Regular" ])
+ , Layer.iconImage (str "motorway-exit-" |> E.append (E.getProperty (str "reflen")))
+ ]
+ , Layer.symbol "poi-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 3)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 42 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 135 204 101 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 46 45 45 1 ) ])
+ , Layer.iconOpacity (float 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage (E.zoom |> E.step (str "") [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium Italic", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "rail-label"
+ "composite"
+ [ Layer.sourceLayer "rail_station_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "maki") |> E.notEqual (str "entrance"))
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.rgba 63 63 63 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.5 ), ( 16, float 1.5 ) ])
+ , Layer.iconHaloWidth (float 4)
+ , Layer.iconHaloColor (E.rgba 255 255 255 1)
+ , Layer.textOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.toString (E.getProperty (str "network")))
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.85 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.zoom |> E.step (E.toFormattedText (str "")) [ ( 13, E.toFormattedText (E.getProperty (str "name_en")) ) ])
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.iconPadding (float 0)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "water-label-sm"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "area") |> E.lessThanOrEqual (float 10000))
+ , Layer.textColor (E.rgba 117 207 240 1)
+ , Layer.textHaloColor (E.rgba 22 22 22 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0.5 ), ( 14, float 1 ) ])
+ , Layer.textHaloBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 0.5 ), ( 15, float 1 ) ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 13 ), ( 20, float 16 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "water-label"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 5
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThan (float 10000))
+ , Layer.textColor (E.rgba 117 207 240 1)
+ , Layer.textHaloColor (E.rgba 22 22 22 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0.5 ), ( 14, float 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 13 ), ( 18, float 18 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ ]
+ , Layer.symbol "poi-parks-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 135 204 101 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 46 45 45 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.iconOpacity (float 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage (E.zoom |> E.step (str "") [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium Italic", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 25 25 25 1 ), ( 16, E.rgba 42 39 39 1 ) ])
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 1.25 ), ( 15, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "airport-label"
+ "composite"
+ [ Layer.sourceLayer "airport_label"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
+ , Layer.textColor (E.rgba 234 234 234 1)
+ , Layer.textHaloColor (E.rgba 63 63 63 1)
+ , Layer.textHaloWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.5 ), ( 16, float 1.5 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.iconOpacity (float 0.8)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 12 ), ( 18, float 18 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.75 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "ref"))) [ ( 12, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 7 ), ( 12, float 8 ), ( 16, float 10 ) ])
+ ]
+ , Layer.symbol "place-islets"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "islet"))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "place-neighbourhood"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "neighbourhood"))
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 16, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-suburb"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "suburb"))
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 15, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-hamlet"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "hamlet"))
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11.5 ), ( 15, float 16 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-village"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 8
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 12)
+ , E.getProperty (str "type") |> E.isEqual (str "village")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11.5 ), ( 16, float 18 ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 6, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.floats [ 0, -0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.iconSize (float 1)
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-town"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 6
+ , Layer.maxzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 12)
+ , E.getProperty (str "type") |> E.isEqual (str "town")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 11.5 ), ( 15, float 20 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 6, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.floats [ 0, -0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.iconSize (float 1)
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-islands"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "island"))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-sm"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank")
+ |> E.matchesFloat [ ( 0, false ), ( 1, false ), ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1.75)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 12 ), ( 14, float 22 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 6, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.2 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.iconSize (float 1)
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0.02 ), ( 6, float 0.07 ) ])
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-md-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textHaloWidth (float 1.5)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textOpacity (float 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.iconImage (str "dot-10")
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.1 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.iconSize (float 1)
+ ]
+ , Layer.symbol "place-city-md-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1.5)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textOpacity (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ , Layer.iconImage (str "dot-10")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-lg-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1.5)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 0.9 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textTranslate (E.floats [ 0, -0.75 ])
+ , Layer.textOpacity (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-lg-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, E.rgba 45 45 45 1 ), ( 12, E.rgba 36 34 34 1 ) ])
+ , Layer.textHaloWidth (float 1.5)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textTranslate (E.floats [ 0, 0 ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "marine-label-sm-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 100 ), ( 6, float 400 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-sm-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ ]
+ , Layer.symbol "marine-label-md-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 12 ), ( 5, float 20 ) ])
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-md-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 14 ), ( 5, float 20 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ , Layer.textLineHeight (float 1.1)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textLetterSpacing (float 0.25)
+ ]
+ , Layer.symbol "marine-label-lg-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Point"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 72 88 131 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "state-label-sm"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 9
+ , Layer.filter (E.getProperty (str "area") |> E.lessThan (float 20000))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 44 45 46 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 10 ), ( 9, float 14 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 6, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "state-label-md"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "area") |> E.lessThan (float 80000)
+ , E.getProperty (str "area") |> E.greaterThanOrEqual (float 20000)
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 44 45 46 1)
+ , Layer.textHaloWidth (float 2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 10 ), ( 8, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 5, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "state-label-lg"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThanOrEqual (float 80000))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 44 45 46 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloWidth (float 2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 10 ), ( 7, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textPadding (float 1)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 4, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "country-label-sm"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.greaterThanOrEqual (float 5))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 0, E.rgba 44 45 46 1 ), ( 4, E.rgba 30 30 30 1 ), ( 8, E.rgba 5 5 5 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 14 ), ( 9, float 22 ) ])
+ ]
+ , Layer.symbol "country-label-md"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 8
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ) ] false)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 0, E.rgba 44 45 46 1 ), ( 4, E.rgba 30 30 30 1 ), ( 8, E.rgba 5 5 5 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "code"))) [ ( 2, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 10 ), ( 8, float 24 ) ])
+ ]
+ , Layer.symbol "country-label-lg"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 0, E.rgba 44 45 46 1 ), ( 4, E.rgba 30 30 30 1 ), ( 8, E.rgba 5 5 5 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 5 ), ( 3, float 6 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 10 ), ( 6, float 24 ) ])
+ ]
+ ]
+ , sources =
+ [ Source.vectorFromUrl "composite" "mapbox://mapbox.mapbox-streets-v7"
+ , Source.rasterFromUrl "mapbox://mapbox.satellite" "mapbox://mapbox.satellite"
+ ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/satellite-streets-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Mapbox Satellite Streets"
+ ]
+ }
diff --git a/examples/Styles/Streets.elm b/examples/Styles/Streets.elm
new file mode 100644
index 0000000..1e7c300
--- /dev/null
+++ b/examples/Styles/Streets.elm
@@ -0,0 +1,3737 @@
+module Styles.Streets exposing (style)
+
+import Mapbox.Expression as E exposing (false, float, str, true)
+import Mapbox.Layer as Layer
+import Mapbox.Source as Source
+import Mapbox.Style as Style exposing (Style(..))
+
+
+style : Style
+style =
+ Style
+ { transition = Style.defaultTransition
+ , light = Style.defaultLight
+ , layers =
+ [ Layer.background "background"
+ [ Layer.backgroundColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, E.rgba 239 233 224 1 ), ( 13, E.rgba 230 227 223 1 ) ])
+ ]
+ , Layer.fill "landcover_snow"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (E.rgba 255 250 250 1))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (float 0.2)
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_wood"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "wood"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 7, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_scrub"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "scrub"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 7, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_grass"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "grass"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 7, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "landcover_crop"
+ "composite"
+ [ Layer.sourceLayer "landcover"
+ , Layer.maxzoom 14
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "crop"))
+ , Layer.fillColor (E.rgba 221 236 176 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 2, float 0.3 ), ( 7, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "national_park"
+ "composite"
+ [ Layer.sourceLayer "landuse_overlay"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "national_park"))
+ , Layer.fillColor (E.rgba 181 229 158 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 0.5 ) ])
+ ]
+ , Layer.fill "hospital"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "hospital"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 234 209 217 1 ), ( 16, E.rgba 244 209 221 1 ) ]
+ )
+ ]
+ , Layer.fill "school"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "school"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 229 221 183 1 ), ( 16, E.rgba 239 231 188 1 ) ]
+ )
+ ]
+ , Layer.fill "park"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "park"))
+ , Layer.fillColor (E.rgba 181 229 158 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 0 ), ( 6, float 1 ) ])
+ ]
+ , Layer.fill "pitch"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.fillColor (E.rgba 170 224 142 1)
+ ]
+ , Layer.line "pitch-line"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "pitch"))
+ , Layer.lineColor (E.rgba 225 237 190 1)
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.fill "cemetery"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "cemetery"))
+ , Layer.fillColor (E.rgba 215 224 188 1)
+ ]
+ , Layer.fill "industrial"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "industrial"))
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 15.5, E.rgba 213 215 224 1 ), ( 16, E.rgba 218 221 235 1 ) ]
+ )
+ ]
+ , Layer.fill "sand"
+ "composite"
+ [ Layer.sourceLayer "landuse"
+ , Layer.filter (E.getProperty (str "class") |> E.isEqual (str "sand"))
+ , Layer.fillColor (E.rgba 237 237 206 1)
+ ]
+ , Layer.fill "hillshade_highlight_bright"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 94))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.12 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_highlight_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 90))
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.12 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_faint"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 89))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.05 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_med"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 78))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.05 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_dark"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 67))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.fill "hillshade_shadow_extreme"
+ "composite"
+ [ Layer.sourceLayer "hillshade"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "level") |> E.isEqual (float 56))
+ , Layer.fillColor (E.rgba 89 84 23 1)
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0.06 ), ( 16, float 0 ) ])
+ , Layer.fillAntialias false
+ ]
+ , Layer.line "waterway-river-canal"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 8
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.lineColor (E.rgba 140 202 247 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.3) [ ( 8.5, float 0.1 ), ( 20, float 8 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, float 0 ), ( 8.5, float 1 ) ])
+ , Layer.lineCap (E.zoom |> E.step E.lineCapButt [ ( 11, E.lineCapRound ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "waterway-small"
+ "composite"
+ [ Layer.sourceLayer "waterway"
+ , Layer.minzoom 13
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", false ), ( "river", false ) ] true)
+ , Layer.lineColor (E.rgba 140 202 247 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.35) [ ( 13.5, float 0.1 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 0 ), ( 13.5, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "water-shadow"
+ "composite"
+ [ Layer.sourceLayer "water"
+ , Layer.fillColor (E.rgba 109 164 242 1)
+ , Layer.fillTranslate (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 7, E.floats [ 0, 0 ] ), ( 16, E.floats [ -1, -1 ] ) ])
+ , Layer.fillTranslateAnchor E.anchorViewport
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "water" "composite" [ Layer.sourceLayer "water", Layer.fillColor (E.rgba 117 207 239 1) ]
+ , Layer.fill "barrier_line-land-polygon"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.fillColor (E.rgba 230 227 223 1)
+ ]
+ , Layer.line "barrier_line-land-line"
+ "composite"
+ [ Layer.sourceLayer "barrier_line"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "class") |> E.isEqual (str "land") ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.99) [ ( 14, float 0.75 ), ( 20, float 40 ) ])
+ , Layer.lineColor (E.rgba 230 227 223 1)
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.fill "aeroway-polygon"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 11
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Polygon"), E.getProperty (str "type") |> E.notEqual (str "apron") ])
+ , Layer.fillColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.5, float 1 ) ])
+ ]
+ , Layer.line "aeroway-runway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "runway") ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 9, float 1 ), ( 18, float 80 ) ])
+ ]
+ , Layer.line "aeroway-taxiway"
+ "composite"
+ [ Layer.sourceLayer "aeroway"
+ , Layer.minzoom 9
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "taxiway")
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 198 202 219 1 ), ( 16, E.rgba 199 204 229 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 0.5 ), ( 18, float 20 ) ])
+ ]
+ , Layer.line "building-line"
+ "composite"
+ [ Layer.sourceLayer "building"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.lineColor (E.rgba 204 201 198 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 0.75 ), ( 20, float 3 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ ]
+ , Layer.fill "building"
+ "composite"
+ [ Layer.sourceLayer "building"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "type") |> E.notEqual (str "building:part")
+ , E.getProperty (str "underground") |> E.isEqual (str "false")
+ ]
+ )
+ , Layer.fillColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 227 224 221 1 ), ( 16, E.rgba 219 217 213 1 ) ])
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15.5, float 0 ), ( 16, float 1 ) ])
+ , Layer.fillOutlineColor (E.rgba 204 201 198 1)
+ ]
+ , Layer.line "tunnel-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 179 183 203 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 3, 3 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "tunnel-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineColor (E.rgba 245 242 238 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 245 242 238 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 221 155 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 191 142 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "tunnel-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 242 221 155 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "tunnel-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineColor (E.rgba 255 191 142 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "tunnel-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "tunnel")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "ferry"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "type") |> E.isEqual (str "ferry") ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 91 172 229 1 ), ( 17, E.rgba 91 114 229 1 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 13, E.floats [ 12, 4 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "ferry_auto"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "type") |> E.isEqual (str "ferry_auto")
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, E.rgba 91 172 229 1 ), ( 17, E.rgba 91 114 229 1 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "crossing", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 0.75 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 17, float 4.6 ), ( 18, float 7 ) ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 0.75 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-sidewalk-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.matchesStr [ ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 0.75 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "turning-features-outline"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "turning_circle", true ), ( "turning_loop", true ) ] false
+ ]
+ )
+ , Layer.iconImage (str "turning-circle-outline")
+ , Layer.iconSize
+ (E.zoom
+ |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.122 ), ( 18, float 0.969 ), ( 20, float 1 ) ]
+ )
+ , Layer.iconAllowOverlap true
+ , Layer.iconIgnorePlacement true
+ , Layer.iconPadding (float 0)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.line "road-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11, float 0 ), ( 11.25, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9.99, float 0 ), ( 10, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9.99, float 0 ), ( 10, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 0 ), ( 6.1, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "road-sidewalks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.matchesStr [ ( "crossing", true ), ( "sidewalk", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "crossing", false ), ( "sidewalk", false ), ( "steps", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 208 99 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 162 91 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.fill "road-pedestrian-polygon-fill"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Polygon")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "path", true ), ( "pedestrian", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.fillColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 16, E.rgba 237 238 242 1 ), ( 16.25, E.rgba 247 248 252 1 ) ]
+ )
+ , Layer.fillOutlineColor (E.rgba 216 219 232 1)
+ , Layer.fillOpacity (float 1)
+ ]
+ , Layer.fill "road-pedestrian-polygon-pattern"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 12
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Polygon")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "path", true ), ( "pedestrian", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.fillColor (E.rgba 255 255 255 1)
+ , Layer.fillOutlineColor (E.rgba 215 212 207 1)
+ , Layer.fillPattern (str "pedestrian-polygon")
+ , Layer.fillOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 0 ), ( 16.25, float 1 ) ])
+ ]
+ , Layer.line "road-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual E.textFitNone
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 239 233 224 1 ), ( 8, E.rgba 255 255 255 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, E.rgba 239 233 224 1 ), ( 7, E.rgba 255 255 255 1 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.symbol "road-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.line "road-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 6, E.rgba 255 255 255 1 ), ( 6.1, E.rgba 234 196 71 1 ), ( 9, E.rgba 242 208 99 1 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 242 146 73 1 ), ( 9, E.rgba 255 162 91 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "road-rail-tracks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 4 ), ( 20, float 8 ) ])
+ , Layer.lineDasharray (E.floats [ 0.1, 15 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.75, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "road-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.matchesStr [ ( "bridge", false ), ( "tunnel", false ) ] true
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.iconPadding (float 2)
+ , Layer.symbolSpacing (float 200)
+ ]
+ , Layer.symbol "turning-features"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "turning_circle", true ), ( "turning_loop", true ) ] false
+ ]
+ )
+ , Layer.iconImage (str "turning-circle")
+ , Layer.iconSize (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.095 ), ( 18, float 1 ) ])
+ , Layer.iconAllowOverlap true
+ , Layer.iconIgnorePlacement true
+ , Layer.iconPadding (float 0)
+ , Layer.iconRotationAlignment E.anchorMap
+ ]
+ , Layer.line "bridge-path-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 18, float 7 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineBlur (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 0 ), ( 15.25, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps-bg"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 2 ), ( 17, float 4.6 ), ( 18, float 7 ) ])
+ , Layer.lineColor (E.rgba 201 203 216 1)
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 0.75 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 2 ), ( 18, float 14.5 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (float 0)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-low"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 11.5, float 0 ), ( 12, float 1 ), ( 14, float 1 ), ( 14.01, float 0 ) ]
+ )
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 13, float 0 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 10, float 0.75 ), ( 18, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "primary")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-construction"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "construction")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 213 216 229 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 0.4, 0.8 ])
+ [ ( 15, E.floats [ 0.3, 0.6 ] )
+ , ( 16, E.floats [ 0.2, 0.3 ] )
+ , ( 17, E.floats [ 0.2, 0.25 ] )
+ , ( 18, E.floats [ 0.15, 0.15 ] )
+ ]
+ )
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "bridge-path"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "path")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 18, float 4 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 1, 0.5 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-steps"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "steps")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 15, float 1 ), ( 16, float 1.6 ), ( 18, float 6 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineDasharray
+ (E.zoom
+ |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.75, 1 ] ), ( 16, E.floats [ 1, 0.75 ] ), ( 17, E.floats [ 0.3, 0.3 ] ) ]
+ )
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 0 ), ( 14.25, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 208 99 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 162 91 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-pedestrian"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "pedestrian")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 1, 0 ]) [ ( 15, E.floats [ 1.5, 0.4 ] ), ( 16, E.floats [ 1, 0.2 ] ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-service-link-track"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 14
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.notEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 18, float 12 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street_limited"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street_limited")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 239 237 234 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-street"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "street")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12.5, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-secondary-tertiary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.matchesStr [ ( "secondary", true ), ( "tertiary", true ) ] false
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 8.5, float 0.5 ), ( 10, float 0.75 ), ( 18, float 26 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1.2) [ ( 5, float 0 ), ( 5.5, float 1 ) ])
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-primary"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "primary")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineOpacity (float 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-minor"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "path", true ), ( "pedestrian", true ), ( "service", true ), ( "track", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 18, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "bridge-oneway-arrows-blue-major"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "primary", true )
+ , ( "secondary", true )
+ , ( "street", true )
+ , ( "street_limited", true )
+ , ( "tertiary", true )
+ ]
+ false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-small") [ ( 17, str "oneway-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconRotationAlignment E.anchorMap
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "bridge-trunk"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 242 208 99 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer")
+ |> E.matchesFloat [ ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 162 91 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-rail-tracks"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.matchesStr [ ( "major_rail", true ), ( "minor_rail", true ) ] false
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, E.rgba 216 214 201 1 ), ( 16, E.rgba 182 184 195 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 4 ), ( 20, float 8 ) ])
+ , Layer.lineDasharray (E.floats [ 0.1, 15 ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.75, float 0 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10.99, float 0 ), ( 11, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.75 ), ( 20, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineOpacity (float 1)
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2-case"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 10, float 1 ), ( 16, float 2 ) ])
+ , Layer.lineColor (E.rgba 255 255 255 1)
+ , Layer.lineGapWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type") |> E.isEqual (str "trunk_link")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 242 208 99 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway_link-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway_link")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 12, float 0.5 ), ( 14, float 2 ), ( 18, float 18 ) ])
+ , Layer.lineColor (E.rgba 255 162 91 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-trunk-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "trunk")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 242 208 99 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "bridge-motorway-2"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class") |> E.isEqual (str "motorway")
+ , E.getProperty (str "layer") |> E.greaterThanOrEqual (float 2)
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ ]
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 5, float 0.75 ), ( 18, float 32 ) ])
+ , Layer.lineColor (E.rgba 255 162 91 1)
+ , Layer.lineCap E.lineCapRound
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "bridge-oneway-arrows-white"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 16
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.all
+ [ E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "motorway", true ), ( "motorway_link", true ), ( "trunk", true ) ] false
+ , E.getProperty (str "oneway") |> E.isEqual (str "true")
+ , E.getProperty (str "structure") |> E.isEqual (str "bridge")
+ , E.getProperty (str "type")
+ |> E.matchesStr [ ( "primary_link", false ), ( "secondary_link", false ), ( "tertiary_link", false ) ] true
+ ]
+ ]
+ )
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.iconImage (E.zoom |> E.step (str "oneway-white-small") [ ( 17, str "oneway-white-large" ) ])
+ , Layer.symbolSpacing (float 200)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.line "aerialway"
+ "composite"
+ [ Layer.sourceLayer "road"
+ , Layer.minzoom 13
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class") |> E.isEqual (str "aerialway")
+ ]
+ )
+ , Layer.lineColor (E.rgba 182 184 195 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1.5) [ ( 14, float 0.5 ), ( 20, float 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.line "admin-3-4-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 8, E.rgba 230 227 223 1 ), ( 16, E.rgba 217 221 241 1 ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 3.75 ), ( 12, float 5.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0 ), ( 8, float 0.75 ) ])
+ , Layer.lineDasharray (E.floats [ 1, 0 ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 8, float 3 ) ])
+ , Layer.lineJoin E.lineJoinBevel
+ ]
+ , Layer.line "admin-2-boundaries-bg"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 3.5 ), ( 10, float 8 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, E.rgba 230 227 223 1 ), ( 8, E.rgba 217 221 241 1 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 4, float 0.5 ) ])
+ , Layer.lineTranslate (E.floats [ 0, 0 ])
+ , Layer.lineBlur (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinMiter
+ ]
+ , Layer.line "admin-3-4-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.greaterThanOrEqual (float 3)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.zoom |> E.step (E.floats [ 2, 0 ]) [ ( 7, E.floats [ 2, 2, 6, 2 ] ) ])
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 0.75 ), ( 12, float 1.5 ) ])
+ , Layer.lineOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 2, float 0 ), ( 3, float 1 ) ])
+ , Layer.lineColor (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, E.rgba 188 190 204 1 ), ( 7, E.rgba 150 152 165 1 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 0)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineColor (E.rgba 120 123 140 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ , Layer.lineCap E.lineCapRound
+ ]
+ , Layer.line "admin-2-boundaries-dispute"
+ "composite"
+ [ Layer.sourceLayer "admin"
+ , Layer.minzoom 1
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "admin_level") |> E.isEqual (float 2)
+ , E.getProperty (str "disputed") |> E.isEqual (float 1)
+ , E.getProperty (str "maritime") |> E.isEqual (float 0)
+ ]
+ )
+ , Layer.lineDasharray (E.floats [ 1.5, 1.5 ])
+ , Layer.lineColor (E.rgba 120 123 140 1)
+ , Layer.lineWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 0.5 ), ( 10, float 2 ) ])
+ , Layer.lineJoin E.lineJoinRound
+ ]
+ , Layer.symbol "housenum-label"
+ "composite"
+ [ Layer.sourceLayer "housenum_label"
+ , Layer.minzoom 17
+ , Layer.textColor (E.rgba 177 176 174 1)
+ , Layer.textHaloColor (E.rgba 219 217 213 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "house_num")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 4)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (float 9.5)
+ ]
+ , Layer.symbol "waterway-label"
+ "composite"
+ [ Layer.sourceLayer "waterway_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "class") |> E.matchesStr [ ( "canal", true ), ( "river", true ) ] false)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloColor (E.rgba 117 207 239 1)
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textMaxAngle (float 30)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 12 ), ( 18, float 16 ) ])
+ ]
+ , Layer.symbol "poi-scalerank4-l15"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 17
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.greaterThanOrEqual (float 15)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank4-l1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "localrank") |> E.lessThanOrEqual (float 14)
+ , E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks_scalerank4"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 1)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank3"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 3)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.getProperty (str "maki") |> E.append (str "-11"))
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "road-label-small"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 15
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr
+ [ ( "link", false )
+ , ( "motorway", false )
+ , ( "pedestrian", false )
+ , ( "primary", false )
+ , ( "secondary", false )
+ , ( "street", false )
+ , ( "street_limited", false )
+ , ( "tertiary", false )
+ , ( "trunk", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textHaloBlur (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 15, float 10 ), ( 20, float 13 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-medium"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.minzoom 11
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "class")
+ |> E.matchesStr [ ( "link", true ), ( "pedestrian", true ), ( "street", true ), ( "street_limited", true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 10 ), ( 20, float 14 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-label-large"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.getProperty (str "class")
+ |> E.matchesStr [ ( "motorway", true ), ( "primary", true ), ( "secondary", true ), ( "tertiary", true ), ( "trunk", true ) ] false
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 0.75)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloBlur (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 9, float 10 ), ( 20, float 16 ) ])
+ , Layer.textMaxAngle (float 30)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textPadding (float 1)
+ , Layer.textRotationAlignment E.anchorMap
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ ]
+ , Layer.symbol "road-shields-black"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", false )
+ , ( "at-motorway", false )
+ , ( "at-state-b", false )
+ , ( "bg-motorway", false )
+ , ( "bg-national", false )
+ , ( "ch-main", false )
+ , ( "ch-motorway", false )
+ , ( "cz-motorway", false )
+ , ( "cz-road", false )
+ , ( "de-motorway", false )
+ , ( "e-road", false )
+ , ( "fi-main", false )
+ , ( "gr-motorway", false )
+ , ( "gr-national", false )
+ , ( "hr-motorway", false )
+ , ( "hr-state", false )
+ , ( "hu-main", false )
+ , ( "hu-motorway", false )
+ , ( "nz-state", false )
+ , ( "pl-expressway", false )
+ , ( "pl-motorway", false )
+ , ( "pl-national", false )
+ , ( "ro-county", false )
+ , ( "ro-motorway", false )
+ , ( "ro-national", false )
+ , ( "rs-motorway", false )
+ , ( "rs-state-1b", false )
+ , ( "se-main", false )
+ , ( "si-expressway", false )
+ , ( "si-motorway", false )
+ , ( "sk-highway", false )
+ , ( "sk-road", false )
+ , ( "us-interstate", false )
+ , ( "us-interstate-business", false )
+ , ( "us-interstate-duplex", false )
+ , ( "us-interstate-truck", false )
+ , ( "za-metropolitan", false )
+ , ( "za-national", false )
+ , ( "za-provincial", false )
+ , ( "za-regional", false )
+ ]
+ true
+ ]
+ )
+ , Layer.textColor (E.rgba 17 17 17 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "road-shields-white"
+ "composite"
+ [ Layer.sourceLayer "road_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "reflen") |> E.lessThanOrEqual (float 6)
+ , E.getProperty (str "shield")
+ |> E.matchesStr
+ [ ( "at-expressway", true )
+ , ( "at-motorway", true )
+ , ( "at-state-b", true )
+ , ( "bg-motorway", true )
+ , ( "bg-national", true )
+ , ( "ch-main", true )
+ , ( "ch-motorway", true )
+ , ( "cz-motorway", true )
+ , ( "cz-road", true )
+ , ( "de-motorway", true )
+ , ( "e-road", true )
+ , ( "fi-main", true )
+ , ( "gr-motorway", true )
+ , ( "gr-national", true )
+ , ( "hr-motorway", true )
+ , ( "hr-state", true )
+ , ( "hu-main", true )
+ , ( "hu-motorway", true )
+ , ( "nz-state", true )
+ , ( "pl-expressway", true )
+ , ( "pl-motorway", true )
+ , ( "pl-national", true )
+ , ( "ro-county", true )
+ , ( "ro-motorway", true )
+ , ( "ro-national", true )
+ , ( "rs-motorway", true )
+ , ( "rs-state-1b", true )
+ , ( "se-main", true )
+ , ( "si-expressway", true )
+ , ( "si-motorway", true )
+ , ( "sk-highway", true )
+ , ( "sk-road", true )
+ , ( "us-interstate", true )
+ , ( "us-interstate-business", true )
+ , ( "us-interstate-duplex", true )
+ , ( "us-interstate-truck", true )
+ , ( "za-metropolitan", true )
+ , ( "za-national", true )
+ , ( "za-provincial", true )
+ , ( "za-regional", true )
+ ]
+ false
+ ]
+ )
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.iconHaloColor (E.rgba 0 0 0 1)
+ , Layer.iconHaloWidth (float 1)
+ , Layer.textOpacity (float 1)
+ , Layer.iconColor (E.rgba 255 255 255 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0)
+ , Layer.textSize (float 9)
+ , Layer.iconImage (E.getProperty (str "shield") |> E.append (str "-") |> E.append (E.getProperty (str "reflen")))
+ , Layer.iconRotationAlignment E.anchorViewport
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 150 ), ( 14, float 200 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.symbolPlacement (E.zoom |> E.step E.symbolPlacementPoint [ ( 11, E.symbolPlacementLine ) ])
+ , Layer.textPadding (float 2)
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textLetterSpacing (float 0.05)
+ , Layer.iconPadding (float 2)
+ ]
+ , Layer.symbol "motorway-junction"
+ "composite"
+ [ Layer.sourceLayer "motorway_junction"
+ , Layer.minzoom 14
+ , Layer.filter (E.getProperty (str "reflen") |> E.greaterThan (float 0))
+ , Layer.textColor (E.rgba 255 255 255 1)
+ , Layer.textTranslate (E.floats [ 0, 0 ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "ref")))
+ , Layer.textSize (float 9)
+ , Layer.iconImage (str "motorway-exit-" |> E.append (E.getProperty (str "reflen")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ ]
+ , Layer.symbol "poi-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 15, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-parks-scalerank2"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.isEqual (float 2)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 14, float 11 ), ( 20, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 15, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "rail-label"
+ "composite"
+ [ Layer.sourceLayer "rail_station_label"
+ , Layer.minzoom 12
+ , Layer.filter (E.getProperty (str "maki") |> E.notEqual (str "entrance"))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.iconHaloWidth (float 4)
+ , Layer.iconHaloColor (E.rgba 255 255 255 1)
+ , Layer.textOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13.99, float 0 ), ( 14, float 1 ) ])
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 11 ), ( 20, float 13 ) ])
+ , Layer.iconImage (E.toString (E.getProperty (str "network")))
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textOffset (E.floats [ 0, 0.85 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.zoom |> E.step (E.toFormattedText (str "")) [ ( 13, E.toFormattedText (E.getProperty (str "name_en")) ) ])
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.iconPadding (float 0)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "water-label-sm"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 15
+ , Layer.filter (E.getProperty (str "area") |> E.lessThanOrEqual (float 10000))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 16, float 13 ), ( 20, float 16 ) ])
+ ]
+ , Layer.symbol "water-label"
+ "composite"
+ [ Layer.sourceLayer "water_label"
+ , Layer.minzoom 5
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThan (float 10000))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 13, float 13 ), ( 18, float 18 ) ])
+ ]
+ , Layer.symbol "poi-parks-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", true )
+ , ( "cemetery", true )
+ , ( "dog-park", true )
+ , ( "garden", true )
+ , ( "golf", true )
+ , ( "park", true )
+ , ( "picnic-site", true )
+ , ( "playground", true )
+ , ( "zoo", true )
+ ]
+ false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 33 102 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "poi-scalerank1"
+ "composite"
+ [ Layer.sourceLayer "poi_label"
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "maki")
+ |> E.matchesStr
+ [ ( "campsite", false )
+ , ( "cemetery", false )
+ , ( "dog-park", false )
+ , ( "garden", false )
+ , ( "golf", false )
+ , ( "park", false )
+ , ( "picnic-site", false )
+ , ( "playground", false )
+ , ( "zoo", false )
+ ]
+ true
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 1)
+ ]
+ )
+ , Layer.textColor (E.rgba 102 78 61 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 14 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 14, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.65 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "airport-label"
+ "composite"
+ [ Layer.sourceLayer "airport_label"
+ , Layer.minzoom 9
+ , Layer.filter (E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2))
+ , Layer.textColor (E.rgba 58 76 166 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 0.5)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 12 ), ( 18, float 18 ) ])
+ , Layer.iconImage
+ (E.zoom
+ |> E.step (E.getProperty (str "maki") |> E.append (str "-11")) [ ( 13, E.getProperty (str "maki") |> E.append (str "-15") ) ]
+ )
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0.75 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textAnchor E.positionTop
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "ref"))) [ ( 12, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 9)
+ ]
+ , Layer.symbol "place-islet-archipelago-aboriginal"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter
+ (E.getProperty (str "type")
+ |> E.matchesStr [ ( "aboriginal_lands", true ), ( "archipelago", true ), ( "islet", true ) ] false
+ )
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 8)
+ ]
+ , Layer.symbol "place-neighbourhood"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "neighbourhood"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11 ), ( 16, float 16 ) ])
+ ]
+ , Layer.symbol "place-suburb"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "suburb"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloBlur (float 0.5)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 7)
+ , Layer.textPadding (float 3)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 11, float 11 ), ( 15, float 18 ) ])
+ ]
+ , Layer.symbol "place-hamlet"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 10
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "hamlet"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 12, float 11.5 ), ( 15, float 16 ) ])
+ ]
+ , Layer.symbol "place-village"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 8
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "village"))
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11.5 ), ( 16, float 18 ) ])
+ ]
+ , Layer.symbol "place-town"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 6
+ , Layer.maxzoom 15
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "town"))
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 12, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, E.floats [ 0, -0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7, float 11.5 ), ( 15, float 20 ) ])
+ ]
+ , Layer.symbol "place-island"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 16
+ , Layer.filter (E.getProperty (str "type") |> E.isEqual (str "island"))
+ , Layer.textColor (E.rgba 63 71 115 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textLineHeight (float 1.2)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 10, float 11 ), ( 18, float 16 ) ])
+ , Layer.textMaxAngle (float 38)
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ])
+ , Layer.textPadding (float 2)
+ , Layer.textOffset (E.floats [ 0, 0 ])
+ , Layer.textRotationAlignment E.anchorViewport
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.01)
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-sm"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "scalerank")
+ |> E.matchesFloat [ ( 0, false ), ( 1, false ), ( 2, false ), ( 3, false ), ( 4, false ), ( 5, false ) ] true
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 12 ), ( 14, float 22 ) ])
+ , Layer.iconImage (str "dot-9")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.2 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ ]
+ , Layer.symbol "place-city-md-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textHaloWidth (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.iconImage (str "dot-10")
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.1 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-md-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ), ( 5, true ) ] false
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-10")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 12 ), ( 12, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-lg-s"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "E", true ), ( "S", true ), ( "SE", true ), ( "SW", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, 0.15 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionTop [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "place-city-lg-n"
+ "composite"
+ [ Layer.sourceLayer "place_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 14
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "ldir")
+ |> E.matchesStr [ ( "N", true ), ( "NE", true ), ( "NW", true ), ( "W", true ) ] false
+ , E.getProperty (str "scalerank") |> E.lessThanOrEqual (float 2)
+ , E.getProperty (str "type") |> E.isEqual (str "city")
+ ]
+ )
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textOpacity (float 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.iconOpacity (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, float 1 ), ( 8, float 0 ) ])
+ , Layer.textHaloBlur (float 1)
+ , Layer.iconImage (str "dot-11")
+ , Layer.textFont
+ (E.zoom
+ |> E.step (E.strings [ "DIN Offc Pro Regular", "Arial Unicode MS Regular" ]) [ ( 8, E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ] ) ]
+ )
+ , Layer.textOffset (E.zoom |> E.interpolate (E.Exponential 1) [ ( 7.99, E.floats [ 0, -0.25 ] ), ( 8, E.floats [ 0, 0 ] ) ])
+ , Layer.textAnchor (E.zoom |> E.step E.positionBottom [ ( 8, E.positionCenter ) ])
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 7)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 4, float 12 ), ( 10, float 22 ) ])
+ ]
+ , Layer.symbol "marine-label-sm-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ , Layer.symbolSpacing (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 100 ), ( 6, float 400 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-sm-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 10
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.greaterThanOrEqual (float 4)
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.1)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 12 ), ( 6, float 16 ) ])
+ ]
+ , Layer.symbol "marine-label-md-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "LineString")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 12 ), ( 5, float 20 ) ])
+ , Layer.symbolSpacing (float 250)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "marine-label-md-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 2
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.geometryType |> E.isEqual (str "Point")
+ , E.getProperty (str "labelrank") |> E.matchesFloat [ ( 2, true ), ( 3, true ) ] false
+ ]
+ )
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 5)
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1.1) [ ( 2, float 14 ), ( 5, float 20 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-ln"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "LineString"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.1)
+ , Layer.symbolPlacement E.symbolPlacementLine
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "marine-label-lg-pt"
+ "composite"
+ [ Layer.sourceLayer "marine_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 4
+ , Layer.filter (E.all [ E.geometryType |> E.isEqual (str "Point"), E.getProperty (str "labelrank") |> E.isEqual (float 1) ])
+ , Layer.textColor (E.rgba 199 228 249 1)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 4)
+ , Layer.textLetterSpacing (float 0.25)
+ , Layer.textLineHeight (float 1.5)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Italic", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 14 ), ( 4, float 30 ) ])
+ ]
+ , Layer.symbol "state-label-sm"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 9
+ , Layer.filter (E.getProperty (str "area") |> E.lessThan (float 20000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 6, float 10 ), ( 9, float 14 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 6, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 5)
+ ]
+ , Layer.symbol "state-label-md"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 8
+ , Layer.filter
+ (E.all
+ [ E.getProperty (str "area") |> E.lessThan (float 80000)
+ , E.getProperty (str "area") |> E.greaterThanOrEqual (float 20000)
+ ]
+ )
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 5, float 10 ), ( 8, float 16 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 5, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "state-label-lg"
+ "composite"
+ [ Layer.sourceLayer "state_label"
+ , Layer.minzoom 3
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "area") |> E.greaterThanOrEqual (float 80000))
+ , Layer.textOpacity (float 1)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor (E.rgba 255 255 255 1)
+ , Layer.textHaloWidth (float 1)
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 4, float 10 ), ( 7, float 18 ) ])
+ , Layer.textTransform E.textTransformUppercase
+ , Layer.textFont (E.strings [ "DIN Offc Pro Bold", "Arial Unicode MS Bold" ])
+ , Layer.textPadding (float 1)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "abbr"))) [ ( 4, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textLetterSpacing (float 0.15)
+ , Layer.textMaxWidth (float 6)
+ ]
+ , Layer.symbol "country-label-sm"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 10
+ , Layer.filter (E.getProperty (str "scalerank") |> E.greaterThanOrEqual (float 5))
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 0.9) [ ( 5, float 14 ), ( 9, float 22 ) ])
+ ]
+ , Layer.symbol "country-label-md"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 8
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 3, true ), ( 4, true ) ] false)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField
+ (E.zoom
+ |> E.step (E.toFormattedText (E.getProperty (str "code"))) [ ( 2, E.toFormattedText (E.getProperty (str "name_en")) ) ]
+ )
+ , Layer.textMaxWidth (float 6)
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 3, float 10 ), ( 8, float 24 ) ])
+ ]
+ , Layer.symbol "country-label-lg"
+ "composite"
+ [ Layer.sourceLayer "country_label"
+ , Layer.minzoom 1
+ , Layer.maxzoom 7
+ , Layer.filter (E.getProperty (str "scalerank") |> E.matchesFloat [ ( 1, true ), ( 2, true ) ] false)
+ , Layer.textColor (E.rgba 0 0 0 1)
+ , Layer.textHaloColor
+ (E.zoom
+ |> E.interpolate (E.Exponential 1) [ ( 2, E.rgba 255 255 255 0.75 ), ( 3, E.rgba 255 255 255 1 ) ]
+ )
+ , Layer.textHaloWidth (float 1.25)
+ , Layer.textField (E.toFormattedText (E.getProperty (str "name_en")))
+ , Layer.textMaxWidth (E.zoom |> E.interpolate (E.Exponential 1) [ ( 0, float 5 ), ( 3, float 6 ) ])
+ , Layer.textFont (E.strings [ "DIN Offc Pro Medium", "Arial Unicode MS Regular" ])
+ , Layer.textSize (E.zoom |> E.interpolate (E.Exponential 1) [ ( 1, float 10 ), ( 6, float 24 ) ])
+ ]
+ ]
+ , sources = [ Source.vectorFromUrl "composite" "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7" ]
+ , misc =
+ [ Style.sprite "mapbox://sprites/mapbox/streets-v9"
+ , Style.glyphs "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
+ , Style.name "Mapbox Streets"
+ ]
+ }
diff --git a/examples/index.html b/examples/index.html
new file mode 100644
index 0000000..45fef4c
--- /dev/null
+++ b/examples/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+ <head>
+ <meta charset="utf-8">
+ <title>elm-mapbox examples</title>
+ </head>
+ <body>
+ <script src="index.js"></script>
+ </body>
+</html>
diff --git a/examples/index.js b/examples/index.js
new file mode 100644
index 0000000..c1efd55
--- /dev/null
+++ b/examples/index.js
@@ -0,0 +1,9 @@
+import { registerCustomElement, registerPorts } from "elm-mapbox";
+import "mapbox-gl/dist/mapbox-gl.css";
+import { Elm } from "./Example02.elm";
+
+const token = process.env.MAPBOX_TOKEN;
+
+registerCustomElement({token});
+var app = Elm.Example02.init({node: document.body});
+// registerPorts(app);
diff --git a/examples/package-lock.json b/examples/package-lock.json
new file mode 100644
index 0000000..ef900be
--- /dev/null
+++ b/examples/package-lock.json
@@ -0,0 +1,8007 @@
+{
+ "name": "elm-mapbox-examples",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz",
+ "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helpers": "^7.2.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/template": "^7.2.2",
+ "@babel/traverse": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz",
+ "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
+ "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.0",
+ "esutils": "^2.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
+ "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz",
+ "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.2.3",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
+ "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz",
+ "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz",
+ "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
+ "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
+ "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
+ "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
+ "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz",
+ "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz",
+ "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
+ "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
+ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz",
+ "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-flow": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
+ "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
+ "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
+ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
+ "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz",
+ "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==",
+ "dev": true,
+ "requires": {
+ "regexp-tree": "^0.1.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
+ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz",
+ "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
+ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.3.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
+ "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
+ "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz",
+ "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.3.1",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.2.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.2.0",
+ "@babel/plugin-transform-classes": "^7.2.0",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.2.0",
+ "@babel/plugin-transform-dotall-regex": "^7.2.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.2.0",
+ "@babel/plugin-transform-function-name": "^7.2.0",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.2.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.2.0",
+ "@babel/plugin-transform-parameters": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.2.0",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.2.0",
+ "browserslist": "^4.3.4",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz",
+ "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.12.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.2.3",
+ "@babel/types": "^7.2.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/types": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz",
+ "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@iarna/toml": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.1.tgz",
+ "integrity": "sha512-I2EjI9TbEFJNLziNPFfpo64PNanOaK17iL2kTW/jGlGOa4bvHw4VEied83kOEB7NJjXf1KfvmsQ2aEjy3xjiGg==",
+ "dev": true
+ },
+ "@mapbox/geojson-area": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz",
+ "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=",
+ "requires": {
+ "wgs84": "0.0.0"
+ }
+ },
+ "@mapbox/geojson-rewind": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.0.tgz",
+ "integrity": "sha512-b+1uPWBERW4Pet/969BNu61ZPDyH2ilIxBjJDFzxyS9TyszF9UrTQyYIl/G38clux3rtpAGGFSGTCSF/qR6UjA==",
+ "requires": {
+ "@mapbox/geojson-area": "0.2.2",
+ "concat-stream": "~1.6.0",
+ "minimist": "1.2.0",
+ "sharkdown": "^0.1.0"
+ }
+ },
+ "@mapbox/geojson-types": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz",
+ "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw=="
+ },
+ "@mapbox/jsonlint-lines-primitives": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
+ "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ="
+ },
+ "@mapbox/mapbox-gl-supported": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.0.tgz",
+ "integrity": "sha512-ZD0Io4XK+/vU/4zpANjOtdWfVszAgnaMPsGR6LKsWh4kLIEv9qoobTVmJPPuwuM+ZI2b3BlZ6DYw1XHVmv6YTA=="
+ },
+ "@mapbox/point-geometry": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
+ "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
+ },
+ "@mapbox/tiny-sdf": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.0.tgz",
+ "integrity": "sha512-dnhyk8X2BkDRWImgHILYAGgo+kuciNYX30CUKj/Qd5eNjh54OWM/mdOS/PWsPeN+3abtN+QDGYM4G220ynVJKA=="
+ },
+ "@mapbox/unitbezier": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
+ "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4="
+ },
+ "@mapbox/vector-tile": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
+ "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
+ "requires": {
+ "@mapbox/point-geometry": "~0.1.0"
+ }
+ },
+ "@mapbox/whoots-js": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz",
+ "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
+ "@parcel/fs": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.2"
+ }
+ },
+ "@parcel/logger": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.0.tgz",
+ "integrity": "sha512-lIRfDg+junbFUUeU0QtHX00gKCgEsYHZydFKwrJ8dc0D+WE2SYT1FcVCgpPAfKYgtg0QQMns8E9vzT9UjH92PQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/workers": "^1.11.0",
+ "chalk": "^2.1.0",
+ "grapheme-breaker": "^0.3.2",
+ "ora": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "@parcel/utils": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==",
+ "dev": true
+ },
+ "@parcel/watcher": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.11.0.tgz",
+ "integrity": "sha512-1ySF0sH06jyhpaErW1UWC7BNgkAl6PJyBjuu2cLTW1o71J2iQqgGt95cbuqmfmjI3l0xYN+nauDFqHERaj7Z8A==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "chokidar": "^2.0.3"
+ }
+ },
+ "@parcel/workers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "physical-cpu-count": "^2.0.0"
+ }
+ },
+ "@types/node": {
+ "version": "10.12.26",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz",
+ "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==",
+ "dev": true
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansi-to-html": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.10.tgz",
+ "integrity": "sha512-znsY3gvsk4CiApWu1yVYF8Nx5Vy0FEe8B0YwyxdbCdErJu5lfKlRHB2twtUjR+dxR4WewTk2OP8XqTmWYnImOg==",
+ "dev": true,
+ "requires": {
+ "entities": "^1.1.1"
+ }
+ },
+ "ansicolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
+ "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8="
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babylon-walk": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.11.6",
+ "babel-types": "^6.15.0",
+ "lodash.clone": "^4.5.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
+ "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brfs": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
+ "dev": true,
+ "requires": {
+ "quote-stream": "^1.0.1",
+ "resolve": "^1.1.5",
+ "static-module": "^2.2.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+ "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
+ "dev": true
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+ "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000929",
+ "electron-to-chromium": "^1.3.103",
+ "node-releases": "^1.1.3"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+ "dev": true
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000936",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000936.tgz",
+ "integrity": "sha512-gOrcU8d+h5AdrO/Mhnj35vttNvAed2taqzrYDfhJE/qVnLxAaGb1doWlRF7iDex+EQPhkwAHc07RBwixnxpFDQ==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000936",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz",
+ "integrity": "sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw==",
+ "dev": true
+ },
+ "cardinal": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz",
+ "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=",
+ "requires": {
+ "ansicolors": "~0.2.1",
+ "redeyed": "~0.4.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.1.tgz",
+ "integrity": "sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "dev": true
+ },
+ "cli-table3": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz",
+ "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==",
+ "dev": true,
+ "requires": {
+ "colors": "^1.1.2",
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clones": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz",
+ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==",
+ "dev": true
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz",
+ "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "requires": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ }
+ }
+ },
+ "colors": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
+ "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
+ "dev": true
+ },
+ "command-exists": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+ "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz",
+ "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz",
+ "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-select": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+ "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^2.1.2",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.28",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
+ "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
+ "dev": true
+ },
+ "css-url-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
+ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
+ "dev": true
+ },
+ "css-what": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
+ "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==",
+ "dev": true
+ },
+ "csscolorparser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
+ "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs="
+ },
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.9.tgz",
+ "integrity": "sha512-osEbYy4kzaNY3nkd92Uf3hy5Jqb5Aztuv+Ze3Z6DjRhyntZDlb3YljiYDdJ05k167U86CZpSR+rbuJYN7N3oBQ==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.7",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.2",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true
+ },
+ "csso": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+ "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+ "dev": true,
+ "requires": {
+ "css-tree": "1.0.0-alpha.29"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.29",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+ "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "deasync": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.14.tgz",
+ "integrity": "sha512-wN8sIuEqIwyQh72AG7oY6YQODCxIp1eXzEZlZznBuwDF8Q03Tdy9QNp1BNZXeadXoklNrw+Ip1fch+KXo/+ASw==",
+ "dev": true,
+ "requires": {
+ "bindings": "~1.2.1",
+ "node-addon-api": "^1.6.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ }
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
+ "dev": true
+ },
+ "dotenv-expand": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "earcut": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.5.tgz",
+ "integrity": "sha512-QFWC7ywTVLtvRAJTVp8ugsuuGQ5mVqNmJ1cRYeLrSHgP3nycr2RHTJob9OtM0v8ujuoKN0NY1a93J/omeTL1PA=="
+ },
+ "editorconfig": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz",
+ "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^10.11.7",
+ "@types/semver": "^5.5.0",
+ "commander": "^2.19.0",
+ "lru-cache": "^4.1.3",
+ "semver": "^5.6.0",
+ "sigmund": "^1.0.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.113",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
+ "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "elm-hot": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.0.1.tgz",
+ "integrity": "sha512-C6VEX3TqVJv+OhUKMMb2mcaSuRArqvCFNItqxue81/mlfX4PWwvovE5vqocgO3AnrStyHElCRm0KNknfDttEBw==",
+ "dev": true
+ },
+ "elm-mapbox": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/elm-mapbox/-/elm-mapbox-3.1.1.tgz",
+ "integrity": "sha512-LZTXnvPS87SI9RNFujGrhTvp9frz0+EaGCo+b2Z07VNe0rq7m0v9Xtaggl5XS4tZA1unrwJhT5zGxohTh+ZGpQ==",
+ "requires": {
+ "mapbox-gl": "^0.52.0"
+ },
+ "dependencies": {
+ "geojson-rewind": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/geojson-rewind/-/geojson-rewind-0.3.1.tgz",
+ "integrity": "sha1-IiQHl8hHzC8MHTE+SqDJFa+n8p0=",
+ "requires": {
+ "@mapbox/geojson-area": "0.2.2",
+ "concat-stream": "~1.6.0",
+ "minimist": "1.2.0",
+ "sharkdown": "^0.1.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "gl-matrix": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.8.1.tgz",
+ "integrity": "sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw=="
+ },
+ "mapbox-gl": {
+ "version": "0.52.0",
+ "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.52.0.tgz",
+ "integrity": "sha512-jiZMGI7LjBNiSwYpFA3drzbZXrgEGERGJRpNS95t5BLZoc8Z+ggOOI1Fz2X+zLlh1j32iNDtf4j6En+caWwYiQ==",
+ "requires": {
+ "@mapbox/geojson-types": "^1.0.2",
+ "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+ "@mapbox/mapbox-gl-supported": "^1.4.0",
+ "@mapbox/point-geometry": "^0.1.0",
+ "@mapbox/tiny-sdf": "^1.1.0",
+ "@mapbox/unitbezier": "^0.0.0",
+ "@mapbox/vector-tile": "^1.3.1",
+ "@mapbox/whoots-js": "^3.1.0",
+ "csscolorparser": "~1.0.2",
+ "earcut": "^2.1.3",
+ "esm": "^3.0.84",
+ "geojson-rewind": "^0.3.0",
+ "geojson-vt": "^3.2.1",
+ "gl-matrix": "^2.6.1",
+ "grid-index": "^1.0.0",
+ "minimist": "0.0.8",
+ "murmurhash-js": "^1.0.0",
+ "pbf": "^3.0.5",
+ "potpack": "^1.0.1",
+ "quickselect": "^1.0.0",
+ "rw": "^1.3.3",
+ "supercluster": "^5.0.0",
+ "tinyqueue": "^1.1.0",
+ "vt-pbf": "^3.0.1"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "quickselect": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
+ "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
+ },
+ "supercluster": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-5.0.0.tgz",
+ "integrity": "sha512-9eeD5Q3908+tqdz+wYHHzi5mLKgnqtpO5mrjUfqr67UmGuOwBtVoQ9pJJrfcVHwMwC0wEBvfNRF9PgFOZgsOpw==",
+ "requires": {
+ "kdbush": "^3.0.0"
+ }
+ },
+ "tinyqueue": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz",
+ "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA=="
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "esm": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.4.tgz",
+ "integrity": "sha512-wOuWtQCkkwD1WKQN/k3RsyGSSN+AmiUzdKftn8vaC+uV9JesYmQlODJxgXaaRz0LaaFIlUxZaUu5NPiUAjKAAA=="
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "expect.js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.2.0.tgz",
+ "integrity": "sha1-EChTPSwcNj90pnlv9X7AUg3tK+E="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "^1.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "fast-glob": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
+ "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "geojson-vt": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
+ "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg=="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "gl-matrix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.0.0.tgz",
+ "integrity": "sha512-PD4mVH/C/Zs64kOozeFnKY8ybhgwxXXQYGWdB4h68krAHknWJgk9uKOn6z8YElh5//vs++90pb6csrTIDWnexA=="
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "grapheme-breaker": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
+ "dev": true,
+ "requires": {
+ "brfs": "^1.2.0",
+ "unicode-trie": "^0.3.1"
+ }
+ },
+ "grid-index": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz",
+ "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "dev": true
+ },
+ "htmlnano": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.1.10.tgz",
+ "integrity": "sha512-eTEUzz8VdWYp+w/KUdb99kwao4reR64epUySyZkQeepcyzPQ2n2EPWzibf6QDxmkGy10Kr+CKxYqI3izSbmhJQ==",
+ "dev": true,
+ "requires": {
+ "cssnano": "^3.4.0",
+ "object-assign": "^4.0.1",
+ "posthtml": "^0.11.3",
+ "posthtml-render": "^1.1.4",
+ "svgo": "^1.0.5",
+ "terser": "^3.8.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "^1.1.2"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "requires": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.16"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.5"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "requires": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ },
+ "dependencies": {
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "requires": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
+ "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
+ "dev": true
+ },
+ "js-beautify": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz",
+ "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==",
+ "dev": true,
+ "requires": {
+ "config-chain": "^1.1.12",
+ "editorconfig": "^0.15.2",
+ "glob": "^7.1.3",
+ "mkdirp": "~0.5.0",
+ "nopt": "~4.0.1"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "kdbush": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz",
+ "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew=="
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash.clone": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "dev": true,
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "mapbox-gl": {
+ "version": "0.53.0",
+ "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.53.0.tgz",
+ "integrity": "sha512-bqD0VTpjD9jS/oXoSiLcUYViFXDvjIDWxo08Pfq5cgCdnRHoLEboItuB2AKsx8OPK5fYme0qhPe/ogF5HICjiA==",
+ "requires": {
+ "@mapbox/geojson-rewind": "^0.4.0",
+ "@mapbox/geojson-types": "^1.0.2",
+ "@mapbox/jsonlint-lines-primitives": "^2.0.2",
+ "@mapbox/mapbox-gl-supported": "^1.4.0",
+ "@mapbox/point-geometry": "^0.1.0",
+ "@mapbox/tiny-sdf": "^1.1.0",
+ "@mapbox/unitbezier": "^0.0.0",
+ "@mapbox/vector-tile": "^1.3.1",
+ "@mapbox/whoots-js": "^3.1.0",
+ "csscolorparser": "~1.0.2",
+ "earcut": "^2.1.5",
+ "esm": "^3.0.84",
+ "geojson-vt": "^3.2.1",
+ "gl-matrix": "^3.0.0",
+ "grid-index": "^1.1.0",
+ "minimist": "0.0.8",
+ "murmurhash-js": "^1.0.0",
+ "pbf": "^3.0.5",
+ "potpack": "^1.0.1",
+ "quickselect": "^2.0.0",
+ "rw": "^1.3.3",
+ "supercluster": "^6.0.1",
+ "tinyqueue": "^2.0.0",
+ "vt-pbf": "^3.1.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+ "dev": true
+ },
+ "mem": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
+ "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+ "dev": true,
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^1.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "merge-source-map": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "murmurhash-js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
+ "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E="
+ },
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz",
+ "integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz",
+ "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+ "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.12.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "opn": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "ora": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-is-promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+ "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "dev": true
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parcel-bundler": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.11.0.tgz",
+ "integrity": "sha512-H0w/Obx76vWiG+UtofznfcHZJBmd6JA5iCn7zrGBINyVAh+Nt/JLD6QDROghHLXfJkO4XyczsB+fO+nPbXlFfA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/core": "^7.0.0",
+ "@babel/generator": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.0.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.0.0",
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "@babel/runtime": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@iarna/toml": "^2.2.0",
+ "@parcel/fs": "^1.11.0",
+ "@parcel/logger": "^1.11.0",
+ "@parcel/utils": "^1.11.0",
+ "@parcel/watcher": "^1.11.0",
+ "@parcel/workers": "^1.11.0",
+ "ansi-to-html": "^0.6.4",
+ "babylon-walk": "^1.0.2",
+ "browserslist": "^4.1.0",
+ "chalk": "^2.1.0",
+ "clone": "^2.1.1",
+ "command-exists": "^1.2.6",
+ "commander": "^2.11.0",
+ "cross-spawn": "^6.0.4",
+ "cssnano": "^4.0.0",
+ "deasync": "^0.1.14",
+ "dotenv": "^5.0.0",
+ "dotenv-expand": "^4.2.0",
+ "fast-glob": "^2.2.2",
+ "filesize": "^3.6.0",
+ "get-port": "^3.2.0",
+ "htmlnano": "^0.1.9",
+ "is-glob": "^4.0.0",
+ "is-url": "^1.2.2",
+ "js-yaml": "^3.10.0",
+ "json5": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "node-forge": "^0.7.1",
+ "node-libs-browser": "^2.0.0",
+ "opn": "^5.1.0",
+ "postcss": "^7.0.5",
+ "postcss-value-parser": "^3.3.1",
+ "posthtml": "^0.11.2",
+ "posthtml-parser": "^0.4.0",
+ "posthtml-render": "^1.1.3",
+ "resolve": "^1.4.0",
+ "semver": "^5.4.1",
+ "serialize-to-js": "^1.1.1",
+ "serve-static": "^1.12.4",
+ "source-map": "0.6.1",
+ "terser": "^3.7.3",
+ "v8-compile-cache": "^2.0.0",
+ "ws": "^5.1.1"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz",
+ "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "pbf": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz",
+ "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==",
+ "requires": {
+ "ieee754": "^1.1.6",
+ "resolve-protobuf-schema": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "physical-cpu-count": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
+ "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+ "dev": true,
+ "requires": {
+ "css-unit-converter": "^1.1.1",
+ "postcss": "^7.0.5",
+ "postcss-selector-parser": "^5.0.0-rc.4",
+ "postcss-value-parser": "^3.3.1"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+ "dev": true,
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "posthtml": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.3.tgz",
+ "integrity": "sha512-quMHnDckt2DQ9lRi6bYLnuyBDnVzK+McHa8+ar4kTdYbWEo/92hREOu3h70ZirudOOp/my2b3r0m5YtxY52yrA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "posthtml-parser": "^0.3.3",
+ "posthtml-render": "^1.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.3.3.tgz",
+ "integrity": "sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "isobject": "^2.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.1.tgz",
+ "integrity": "sha512-h7vXIQ21Ikz2w5wPClPakNP6mJeJCK6BT0GpqnQrNNABdR7/TchNlFyryL1Bz6Ww53YWCKkr6tdZuHlxY1AVdQ==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.1.4.tgz",
+ "integrity": "sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA==",
+ "dev": true
+ },
+ "potpack": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz",
+ "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw=="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "protocol-buffers-schema": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz",
+ "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w=="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "quickselect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+ },
+ "quote-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "minimist": "^1.1.3",
+ "through2": "^2.0.0"
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "redeyed": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz",
+ "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=",
+ "requires": {
+ "esprima": "~1.0.4"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+ "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
+ }
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp-tree": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.1.tgz",
+ "integrity": "sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw==",
+ "dev": true,
+ "requires": {
+ "cli-table3": "^0.5.0",
+ "colors": "^1.1.2",
+ "yargs": "^12.0.5"
+ }
+ },
+ "regexpu-core": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
+ "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-protobuf-schema": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+ "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+ "requires": {
+ "protocol-buffers-schema": "^3.3.1"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-eval": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.0.tgz",
+ "integrity": "sha512-4qkBS8VzJatFR7F0eZfKoJyjqo43jY1jBvRhB5WXM0eJNjx9fiSmph5NApJefqKqpASKWPfaIJCJMMeWePSzfw==",
+ "dev": true,
+ "requires": {
+ "clones": "^1.2.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "serialize-to-js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz",
+ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==",
+ "dev": true,
+ "requires": {
+ "js-beautify": "^1.8.9",
+ "safer-eval": "^1.3.0"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-copy": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
+ "dev": true
+ },
+ "sharkdown": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.0.tgz",
+ "integrity": "sha1-YdT+Up510CRCEnzJI0NiJlCZIU8=",
+ "requires": {
+ "cardinal": "~0.4.2",
+ "expect.js": "~0.2.0",
+ "minimist": "0.0.5",
+ "split": "~0.2.10",
+ "stream-spigot": "~2.1.2",
+ "through": "~2.3.4"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz",
+ "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY="
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz",
+ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=",
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "static-eval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz",
+ "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==",
+ "dev": true,
+ "requires": {
+ "escodegen": "^1.8.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "static-module": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "~1.6.0",
+ "convert-source-map": "^1.5.1",
+ "duplexer2": "~0.1.4",
+ "escodegen": "~1.9.0",
+ "falafel": "^2.1.0",
+ "has": "^1.0.1",
+ "magic-string": "^0.22.4",
+ "merge-source-map": "1.0.4",
+ "object-inspect": "~1.4.0",
+ "quote-stream": "~1.0.2",
+ "readable-stream": "~2.3.3",
+ "shallow-copy": "~0.0.1",
+ "static-eval": "^2.0.0",
+ "through2": "~2.0.3"
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-spigot": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/stream-spigot/-/stream-spigot-2.1.2.tgz",
+ "integrity": "sha1-feFF6Bn43Q20UJDRPc9zqO08wDU=",
+ "requires": {
+ "readable-stream": "~1.1.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "stylehacks": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.2.tgz",
+ "integrity": "sha512-AZwvn2b3aNKK1yp+VgNPOuC2jIJOvh9PAiCq2gjDBW1WkQxQUksR1RugOJRIOhMYTGHZeoMcMQKp3/qaS3evNg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supercluster": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-6.0.1.tgz",
+ "integrity": "sha512-NTth/FBFUt9mwW03+Z6Byscex+UHu0utroIe6uXjGu9PrTuWtW70LYv9I1vPSYYIHQL74S5zAkrXrHEk0L7dGA==",
+ "requires": {
+ "kdbush": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svgo": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz",
+ "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==",
+ "dev": true,
+ "requires": {
+ "coa": "~2.0.1",
+ "colors": "~1.1.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "~0.1.0",
+ "css-tree": "1.0.0-alpha.28",
+ "css-url-regex": "^1.1.0",
+ "csso": "^3.5.0",
+ "js-yaml": "^3.12.0",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.0.4",
+ "sax": "~1.2.4",
+ "stable": "~0.1.6",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ }
+ }
+ },
+ "terser": {
+ "version": "3.16.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz",
+ "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.9"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ }
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tiny-inflate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz",
+ "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=",
+ "dev": true
+ },
+ "tinyqueue": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.0.tgz",
+ "integrity": "sha512-CuwAcoAyhS73YgUpTVWI6t/t2mo9zfqbxTbnu4B1U6QPPhq3mxMxywSbo3cWykan4cBkXBfE8F7qulYrNcsHyQ=="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+ "dev": true
+ },
+ "unicode-trie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
+ "dev": true,
+ "requires": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "v8-compile-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
+ "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
+ "dev": true
+ },
+ "vendors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
+ "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
+ "dev": true
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "vt-pbf": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz",
+ "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==",
+ "requires": {
+ "@mapbox/point-geometry": "0.1.0",
+ "@mapbox/vector-tile": "^1.3.1",
+ "pbf": "^3.0.5"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "wgs84": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz",
+ "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY="
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+}
diff --git a/examples/package.json b/examples/package.json
new file mode 100644
index 0000000..1091539
--- /dev/null
+++ b/examples/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "elm-mapbox-examples",
+ "version": "1.0.0",
+ "description": "Examples for the elm-mapbox package",
+ "main": "index.js",
+ "scripts": {
+ "test": "parcel test",
+ "start": "parcel index.html"
+ },
+ "author": "Jakub Hampl",
+ "license": "MIT",
+ "devDependencies": {
+ "elm-hot": "^1.0.1",
+ "parcel-bundler": "^1.11.0"
+ },
+ "dependencies": {
+ "elm-mapbox": "^3.1.1",
+ "mapbox-gl": "^0.53.0"
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 9bb5109..63f9638 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,60 +1,9 @@
{
"name": "elm-mapbox",
- "version": "3.1.0",
+ "version": "3.2.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@mapbox/geojson-area": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz",
- "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=",
- "requires": {
- "wgs84": "0.0.0"
- }
- },
- "@mapbox/geojson-types": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz",
- "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw=="
- },
- "@mapbox/jsonlint-lines-primitives": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
- "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ="
- },
- "@mapbox/mapbox-gl-supported": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.0.tgz",
- "integrity": "sha512-ZD0Io4XK+/vU/4zpANjOtdWfVszAgnaMPsGR6LKsWh4kLIEv9qoobTVmJPPuwuM+ZI2b3BlZ6DYw1XHVmv6YTA=="
- },
- "@mapbox/point-geometry": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
- "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
- },
- "@mapbox/tiny-sdf": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.0.tgz",
- "integrity": "sha512-dnhyk8X2BkDRWImgHILYAGgo+kuciNYX30CUKj/Qd5eNjh54OWM/mdOS/PWsPeN+3abtN+QDGYM4G220ynVJKA=="
- },
- "@mapbox/unitbezier": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
- "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4="
- },
- "@mapbox/vector-tile": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
- "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
- "requires": {
- "@mapbox/point-geometry": "~0.1.0"
- }
- },
- "@mapbox/whoots-js": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz",
- "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="
- },
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
@@ -91,6 +40,18 @@
"acorn": "^5.0.3"
}
},
+ "ajv": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+ "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -100,10 +61,15 @@
"color-convert": "^1.9.0"
}
},
- "ansicolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz",
- "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8="
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
},
"arr-diff": {
"version": "2.0.0",
@@ -120,12 +86,204 @@
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
"array-unique": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
"dev": true
},
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "dev": true,
+ "requires": {
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "dev": true
+ },
+ "binwrap": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/binwrap/-/binwrap-0.1.4.tgz",
+ "integrity": "sha1-yh94cDAiElGPoksHcm+cUKFcdVk=",
+ "dev": true,
+ "requires": {
+ "request": "^2.81.0",
+ "request-promise": "^4.2.0",
+ "tar": "^2.2.1",
+ "unzip": "^0.1.11"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+ "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
"braces": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
@@ -153,10 +311,11 @@
"vlq": "^1.0.0"
}
},
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ "buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "dev": true
},
"builtin-modules": {
"version": "2.0.0",
@@ -164,13 +323,44 @@
"integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==",
"dev": true
},
- "cardinal": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz",
- "integrity": "sha1-ylu2iltRG5D+k7ms6km97lwyv+I=",
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
"requires": {
- "ansicolors": "~0.2.1",
- "redeyed": "~0.4.0"
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "dev": true,
+ "requires": {
+ "traverse": ">=0.3.0 <0.4"
}
},
"chalk": {
@@ -184,6 +374,62 @@
"supports-color": "^5.3.0"
}
},
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
"color-convert": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
@@ -199,31 +445,256 @@
"integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
"dev": true
},
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "dev": true,
"requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "delayed-stream": "~1.0.0"
}
},
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
},
- "csscolorparser": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
- "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs="
+ "cross-spawn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.0.tgz",
+ "integrity": "sha1-glR3SrR4a4xbPPTfumbOVjkywlI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
},
- "earcut": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.3.tgz",
- "integrity": "sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A=="
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "elm": {
+ "version": "0.19.0-bugfix2",
+ "resolved": "https://registry.npmjs.org/elm/-/elm-0.19.0-bugfix2.tgz",
+ "integrity": "sha512-kEbsC7SzTo6B2aq9ZEhdNZnqSehqVZvdXcm2FBKIAp1eRa1pxQr7VG1WXF5oC/XtYoQaQHVT3QMt5/PqA00ygg==",
+ "dev": true,
+ "requires": {
+ "binwrap": "0.1.4"
+ }
+ },
+ "elm-test": {
+ "version": "0.19.0-rev3",
+ "resolved": "https://registry.npmjs.org/elm-test/-/elm-test-0.19.0-rev3.tgz",
+ "integrity": "sha512-+zcutibM0LOG6uT48bMsSGzyPnptgenxBUjNMJFRYuddTrOFVH1dFCKUu512lsvihBUJixaxjIG+DjQbWlpO/Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.1.0",
+ "chokidar": "1.7.0",
+ "cross-spawn": "4.0.0",
+ "elmi-to-json": "0.19.0",
+ "find-parent-dir": "^0.3.0",
+ "firstline": "1.2.1",
+ "fs-extra": "0.30.0",
+ "fsevents": "1.2.4",
+ "glob": "7.1.1",
+ "lodash": "4.17.10",
+ "minimist": "^1.2.0",
+ "murmur-hash-js": "1.0.0",
+ "node-elm-compiler": "5.0.1",
+ "split": "1.0.1",
+ "supports-color": "4.2.0",
+ "temp": "0.8.3",
+ "xmlbuilder": "^8.2.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.1.0",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "supports-color": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.0.tgz",
+ "integrity": "sha512-Ts0Mu/A1S1aZxEJNG88I4Oc9rcZSBFNac5e27yh4j2mqbhZSSzR1Ah79EYwSn9Zuh7lrlGD2cVGzw1RKGzyLSg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^2.0.0"
+ }
+ }
+ }
+ },
+ "elmi-to-json": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/elmi-to-json/-/elmi-to-json-0.19.0.tgz",
+ "integrity": "sha512-qNrxc1m2KAYbxT22rHyWBjzhYjJkENYgl6Ya7XVL1uxcZPiaINwFEJ7OdpGnLsM79xsWPT0z9yesQtYXKrWE7w==",
+ "dev": true,
+ "requires": {
+ "binwrap": "^0.2.0-rc2"
+ },
+ "dependencies": {
+ "binwrap": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/binwrap/-/binwrap-0.2.0.tgz",
+ "integrity": "sha512-HUspivC8zPE37KJQ0S4zsNHUpymzQBinmpdMoa+JwmB6Mi+p30ywVZJcillYpbQmiX2wLykaaDJxXmwZkbaZGA==",
+ "dev": true,
+ "requires": {
+ "mustache": "^2.3.0",
+ "request": "^2.87.0",
+ "request-promise": "^4.2.0",
+ "tar": "^2.2.1",
+ "unzip-stream": "^0.3.0"
+ }
+ }
+ }
},
"escape-string-regexp": {
"version": "1.0.5",
@@ -231,16 +702,6 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
- "esm": {
- "version": "3.0.84",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.0.84.tgz",
- "integrity": "sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw=="
- },
- "esprima": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
- "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
- },
"estree-walker": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
@@ -265,10 +726,32 @@
"fill-range": "^2.1.0"
}
},
- "expect.js": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.2.0.tgz",
- "integrity": "sha1-EChTPSwcNj90pnlv9X7AUg3tK+E="
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
},
"extglob": {
"version": "0.3.2",
@@ -279,6 +762,24 @@
"is-extglob": "^1.0.0"
}
},
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@@ -298,6 +799,42 @@
"repeat-string": "^1.5.2"
}
},
+ "find-elm-dependencies": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.0.tgz",
+ "integrity": "sha512-lnLilxwdS3U/CSPoMnfUL1u21MBNolv6NF54y4Yds7WxdRMrTBXrmugrcvIGvakWQ2anYuinmBSUR+jUQy+vpA==",
+ "dev": true,
+ "requires": {
+ "firstline": "1.2.0",
+ "lodash": "4.17.10"
+ },
+ "dependencies": {
+ "firstline": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz",
+ "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
+ },
+ "find-parent-dir": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
+ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+ "dev": true
+ },
+ "firstline": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.1.tgz",
+ "integrity": "sha1-uIZzxCAJ+IIfrCkm6ZcgrO6ST64=",
+ "dev": true
+ },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -313,26 +850,620 @@
"for-in": "^1.0.1"
}
},
- "geojson-rewind": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/geojson-rewind/-/geojson-rewind-0.3.1.tgz",
- "integrity": "sha1-IiQHl8hHzC8MHTE+SqDJFa+n8p0=",
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
"requires": {
- "@mapbox/geojson-area": "0.2.2",
- "concat-stream": "~1.6.0",
- "minimist": "1.2.0",
- "sharkdown": "^0.1.0"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
}
},
- "geojson-vt": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
- "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg=="
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
},
- "gl-matrix": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.8.1.tgz",
- "integrity": "sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw=="
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
},
"glob-base": {
"version": "0.3.0",
@@ -353,10 +1484,27 @@
"is-glob": "^2.0.0"
}
},
- "grid-index": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.0.0.tgz",
- "integrity": "sha1-rSxdVM5bNUN/r/HXCprrPR0mERA="
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
},
"has-flag": {
"version": "3.0.0",
@@ -364,15 +1512,110 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
},
"is-buffer": {
"version": "1.1.6",
@@ -380,6 +1623,34 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
"is-dotfile": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
@@ -431,6 +1702,23 @@
"kind-of": "^3.0.2"
}
},
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
"is-posix-bracket": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
@@ -443,10 +1731,29 @@
"integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
"dev": true
},
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
},
"isobject": {
"version": "2.1.0",
@@ -457,10 +1764,56 @@
"isarray": "1.0.0"
}
},
- "kdbush": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz",
- "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ=="
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
},
"kind-of": {
"version": "3.2.2",
@@ -471,6 +1824,31 @@
"is-buffer": "^1.1.5"
}
},
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
"magic-string": {
"version": "0.22.5",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
@@ -488,41 +1866,54 @@
}
}
},
- "mapbox-gl": {
- "version": "0.51.0",
- "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.51.0.tgz",
- "integrity": "sha512-ToV6WJIgdLIKSwLO13pRf5EMeVx4gjdO10akFFxGVwYO/G1nCIZOurKFPIEXbAg0zmZXJD+55HbOIg+AbJICpQ==",
- "requires": {
- "@mapbox/geojson-types": "^1.0.2",
- "@mapbox/jsonlint-lines-primitives": "^2.0.2",
- "@mapbox/mapbox-gl-supported": "^1.4.0",
- "@mapbox/point-geometry": "^0.1.0",
- "@mapbox/tiny-sdf": "^1.1.0",
- "@mapbox/unitbezier": "^0.0.0",
- "@mapbox/vector-tile": "^1.3.1",
- "@mapbox/whoots-js": "^3.1.0",
- "csscolorparser": "~1.0.2",
- "earcut": "^2.1.3",
- "esm": "^3.0.84",
- "geojson-rewind": "^0.3.0",
- "geojson-vt": "^3.2.1",
- "gl-matrix": "^2.6.1",
- "grid-index": "^1.0.0",
- "minimist": "0.0.8",
- "murmurhash-js": "^1.0.0",
- "pbf": "^3.0.5",
- "potpack": "^1.0.1",
- "quickselect": "^1.0.0",
- "rw": "^1.3.3",
- "supercluster": "^4.1.1",
- "tinyqueue": "^1.1.0",
- "vt-pbf": "^3.0.1"
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "match-stream": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/match-stream/-/match-stream-0.0.2.tgz",
+ "integrity": "sha1-mesFAJOzTf+t5CG5rAtBCpz6F88=",
+ "dev": true,
+ "requires": {
+ "buffers": "~0.1.1",
+ "readable-stream": "~1.0.0"
},
"dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
}
}
},
@@ -553,15 +1944,163 @@
"regex-cache": "^0.4.2"
}
},
+ "mime-db": {
+ "version": "1.37.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.37.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
},
- "murmurhash-js": {
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "murmur-hash-js": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
- "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E="
+ "resolved": "https://registry.npmjs.org/murmur-hash-js/-/murmur-hash-js-1.0.0.tgz",
+ "integrity": "sha1-UEEEkmnJZjPIZjhpYLL0KJ515bA=",
+ "dev": true
+ },
+ "mustache": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz",
+ "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natives": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
+ "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
+ "dev": true
+ },
+ "node-elm-compiler": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.1.tgz",
+ "integrity": "sha512-Li9NfZTL83/URoUEWly+iHJeOcZRBYUaeIL4MImnB4r21oe/xpkR6JRHjdNjLf1rMtO0tgPyOvuGW4Beytaaow==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "4.0.0",
+ "find-elm-dependencies": "2.0.0",
+ "lodash": "4.17.10",
+ "temp": "^0.8.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ }
+ }
},
"normalize-path": {
"version": "2.1.1",
@@ -572,6 +2111,51 @@
"remove-trailing-separator": "^1.0.1"
}
},
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
"object.omit": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
@@ -582,12 +2166,50 @@
"is-extendable": "^0.1.1"
}
},
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "over": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/over/-/over-0.0.5.tgz",
+ "integrity": "sha1-8phS5w/X4l82DgE6jsRMgq7bVwg=",
+ "dev": true
+ },
"parse-glob": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
@@ -600,25 +2222,35 @@
"is-glob": "^2.0.0"
}
},
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
"path-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
"integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
"dev": true
},
- "pbf": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz",
- "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==",
- "requires": {
- "ieee754": "^1.1.6",
- "resolve-protobuf-schema": "^2.0.0"
- }
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
},
- "potpack": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz",
- "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw=="
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
},
"preserve": {
"version": "0.2.0",
@@ -635,17 +2267,70 @@
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
},
- "protocol-buffers-schema": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz",
- "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w=="
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
},
- "quickselect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
- "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
+ "psl": {
+ "version": "1.1.31",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
+ "dev": true
+ },
+ "pullstream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/pullstream/-/pullstream-0.4.1.tgz",
+ "integrity": "sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ=",
+ "dev": true,
+ "requires": {
+ "over": ">= 0.0.5 < 1",
+ "readable-stream": "~1.0.31",
+ "setimmediate": ">= 1.0.2 < 2",
+ "slice-stream": ">= 1.0.0 < 2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
},
"randomatic": {
"version": "3.0.0",
@@ -676,6 +2361,7 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -686,12 +2372,291 @@
"util-deprecate": "~1.0.1"
}
},
- "redeyed": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz",
- "integrity": "sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8=",
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
"requires": {
- "esprima": "~1.0.4"
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
}
},
"regex-cache": {
@@ -703,6 +2668,16 @@
"is-equal-shallow": "^0.1.3"
}
},
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -721,6 +2696,55 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "request-promise": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz",
+ "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
+ }
+ },
+ "request-promise-core": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.13.1"
+ }
+ },
"resolve": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
@@ -730,12 +2754,25 @@
"path-parse": "^1.0.5"
}
},
- "resolve-protobuf-schema": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
- "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
"requires": {
- "protocol-buffers-schema": "^3.3.1"
+ "glob": "^7.1.3"
}
},
"rollup": {
@@ -791,61 +2828,76 @@
"micromatch": "^2.3.11"
}
},
- "rw": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
- "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
- },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
- "sharkdown": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.0.tgz",
- "integrity": "sha1-YdT+Up510CRCEnzJI0NiJlCZIU8=",
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
"requires": {
- "cardinal": "~0.4.2",
- "expect.js": "~0.2.0",
- "minimist": "0.0.5",
- "split": "~0.2.10",
- "stream-spigot": "~2.1.2",
- "through": "~2.3.4"
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
},
"dependencies": {
- "minimist": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz",
- "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY="
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
}
}
},
- "split": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz",
- "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=",
- "requires": {
- "through": "2"
- }
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
},
- "stream-spigot": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/stream-spigot/-/stream-spigot-2.1.2.tgz",
- "integrity": "sha1-feFF6Bn43Q20UJDRPc9zqO08wDU=",
+ "slice-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-stream/-/slice-stream-1.0.0.tgz",
+ "integrity": "sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA=",
+ "dev": true,
"requires": {
- "readable-stream": "~1.1.0"
+ "readable-stream": "~1.0.31"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
},
"readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
@@ -856,26 +2908,206 @@
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
}
}
},
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
+ "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
- "supercluster": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-4.1.1.tgz",
- "integrity": "sha512-sF0FfUOPFp96DKzwWFLeQOEqqKu2PpcesxAFeFsknA/q7g7igVVn/p3NI2XHEghNSyDAqunKNKqAbqNO8+7NDQ==",
- "requires": {
- "kdbush": "^2.0.1"
- }
- },
"supports-color": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
@@ -885,25 +3117,317 @@
"has-flag": "^3.0.0"
}
},
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "rimraf": "~2.2.6"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true
+ }
+ }
+ },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
},
- "tinyqueue": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz",
- "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA=="
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
},
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "traverse": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "unzip": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/unzip/-/unzip-0.1.11.tgz",
+ "integrity": "sha1-iXScY7BY19kNYZ+GuYqhU107l/A=",
+ "dev": true,
+ "requires": {
+ "binary": ">= 0.3.0 < 1",
+ "fstream": ">= 0.1.30 < 1",
+ "match-stream": ">= 0.0.2 < 1",
+ "pullstream": ">= 0.4.1 < 1",
+ "readable-stream": "~1.0.31",
+ "setimmediate": ">= 1.0.1 < 2"
+ },
+ "dependencies": {
+ "fstream": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz",
+ "integrity": "sha1-czfwWPu7vvqMn1YaKMqwhJICyYg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~3.0.2",
+ "inherits": "~2.0.0",
+ "mkdirp": "0.5",
+ "rimraf": "2"
+ }
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "^1.1.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "unzip-stream": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.0.tgz",
+ "integrity": "sha512-NG1h/MdGIX3HzyqMjyj1laBCmlPYhcO4xEy7gEqqzGiSLw7XqDQCnY4nYSn5XSaH8mQ6TFkaujrO8d/PIZN85A==",
+ "dev": true,
+ "requires": {
+ "binary": "^0.3.0",
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
},
"vlq": {
"version": "1.0.0",
@@ -911,20 +3435,32 @@
"integrity": "sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g==",
"dev": true
},
- "vt-pbf": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz",
- "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==",
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
"requires": {
- "@mapbox/point-geometry": "0.1.0",
- "@mapbox/vector-tile": "^1.3.1",
- "pbf": "^3.0.5"
+ "isexe": "^2.0.0"
}
},
- "wgs84": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz",
- "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY="
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 69085e7..49ec0a6 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,8 @@
},
"homepage": "https://github.com/gampleman/elm-mapbox#readme",
"devDependencies": {
+ "elm": "^0.19.0-bugfix2",
+ "elm-test": "^0.19.0-rev3",
"prettier": "^1.13.5",
"rollup": "^0.60.7",
"rollup-plugin-buble": "^0.19.2",
@@ -41,6 +43,6 @@
"mapbox-gl": "^0.52.0"
},
"prettier": {
- "tabWidth": 2
+ "tabWidth": 2
}
}
diff --git a/src/Mapbox/Expression.elm b/src/Mapbox/Expression.elm
index 08f9f20..109a440 100644
--- a/src/Mapbox/Expression.elm
+++ b/src/Mapbox/Expression.elm
@@ -146,6 +146,7 @@ module Mapbox.Expression
, toBool
, toColor
, toFloat
+ , toFormattedText
, toString
, true
, typeof
@@ -220,7 +221,7 @@ if the type is wrong:
You can also use these functions to explicitly cast to a particular type:
-@docs toBool, toColor, toFloat, toString
+@docs toBool, toColor, toFloat, toString, toFormattedText
@docs typeof
@@ -953,6 +954,13 @@ toString =
call1 "to-string"
+{-| Just like `toString`, but outputs a formatted string useable for displaying to users.
+-}
+toFormattedText : Expression exprType any -> Expression exprType FormattedText
+toFormattedText =
+ call1 "to-string"
+
+
{-| Returns a string describing the type of the given value.
-}
typeof : Expression exprType any -> Expression exprType String
diff --git a/style-generator/elm.json b/style-generator/elm.json
index 4f116f6..abf9cf6 100644
--- a/style-generator/elm.json
+++ b/style-generator/elm.json
@@ -13,6 +13,7 @@
"elm/json": "1.0.0",
"elm/parser": "1.1.0",
"elm-community/list-extra": "8.0.0",
+ "mdgriffith/elm-ui": "1.1.0",
"stil4m/elm-syntax": "6.1.0",
"stil4m/structured-writer": "1.0.2",
"the-sett/elm-string-case": "1.0.2"
diff --git a/style-generator/index.html b/style-generator/index.html
new file mode 100644
index 0000000..edb0479
--- /dev/null
+++ b/style-generator/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+ <head>
+ <meta charset="utf-8">
+ <title>Mapbox Style to Elm</title>
+ </head>
+ <body>
+ <script src="index.js"></script>
+ </body>
+</html>
diff --git a/style-generator/index.js b/style-generator/index.js
new file mode 100644
index 0000000..4589ee3
--- /dev/null
+++ b/style-generator/index.js
@@ -0,0 +1,81 @@
+import { Elm } from "./src/Main.elm";
+import { migrate } from "@mapbox/mapbox-gl-style-spec";
+import deref from "@mapbox/mapbox-gl-style-spec/migrate/v9"
+import CodeMirror from "codemirror/lib/codemirror.js";
+import "codemirror/lib/codemirror.css";
+import "codemirror/theme/base16-light.css";
+import "codemirror/mode/elm/elm.js";
+import "codemirror/mode/javascript/javascript.js";
+
+var app = Elm.Main.init({});
+
+customElements.define(
+ "code-editor",
+ class extends HTMLElement {
+ constructor() {
+ super();
+ this._editorValue = "";
+ }
+
+ get editorValue() {
+ return this._editorValue;
+ }
+
+ set editorValue(value) {
+ if (this._editorValue === value) return;
+ this._editorValue = value;
+ if (!this._editor) return;
+ this._editor.setValue(value);
+ }
+
+ get readonly() {
+ return this._readonly;
+ }
+
+ set readonly(value) {
+ this._readonly = value;
+ if (!this._editor) return;
+ this._editor.setOption('readonly', value);
+ }
+
+ get mode() {
+ return this._mode;
+ }
+
+ set mode(value) {
+ this._mode = value;
+ if (!this._editor) return;
+ this._editor.setOption('mode', value);
+ }
+
+ connectedCallback() {
+ this._editor = CodeMirror(this, {
+ identUnit: 4,
+ mode: this._mode,
+ lineNumbers: true,
+ value: this._editorValue,
+ readOnly: this._readonly,
+ lineWrapping: true
+ });
+
+ this._editor.on("changes", () => {
+ this._editorValue = this._editor.getValue();
+ console.log("changes", this._editorValue)
+ this.dispatchEvent(new CustomEvent("editorChanged", {detail: this._editorValue}));
+ });
+
+ const {width, height} = this.getBoundingClientRect()
+ this._editor.setSize(width, height);
+ }
+ }
+);
+
+app.ports.requestStyleUpgrade.subscribe(style => {
+ try {
+ const migrated = deref(migrate(JSON.parse(style)));
+ app.ports.styleUpgradeComplete.send({type: 'Ok', result: migrated});
+ } catch(error) {
+ app.ports.styleUpgradeComplete.send({type: 'Err', error});
+ }
+
+});
diff --git a/style-generator/package-lock.json b/style-generator/package-lock.json
new file mode 100644
index 0000000..48cf7af
--- /dev/null
+++ b/style-generator/package-lock.json
@@ -0,0 +1,7157 @@
+{
+ "name": "elm-mapbox-style-generator",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz",
+ "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helpers": "^7.2.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/template": "^7.2.2",
+ "@babel/traverse": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
+ "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.2.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz",
+ "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0",
+ "esutils": "^2.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
+ "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz",
+ "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.2.3",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz",
+ "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
+ "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
+ "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
+ "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
+ "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
+ "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz",
+ "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz",
+ "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
+ "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
+ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz",
+ "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-flow": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
+ "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
+ "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
+ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
+ "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
+ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz",
+ "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz",
+ "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
+ "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
+ "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz",
+ "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.2.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.2.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.2.0",
+ "@babel/plugin-transform-classes": "^7.2.0",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.2.0",
+ "@babel/plugin-transform-dotall-regex": "^7.2.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.2.0",
+ "@babel/plugin-transform-function-name": "^7.2.0",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.2.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.2.0",
+ "@babel/plugin-transform-parameters": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.2.0",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.2.0",
+ "browserslist": "^4.3.4",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz",
+ "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.12.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.2.3",
+ "@babel/types": "^7.2.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/types": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
+ "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@iarna/toml": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.1.tgz",
+ "integrity": "sha512-I2EjI9TbEFJNLziNPFfpo64PNanOaK17iL2kTW/jGlGOa4bvHw4VEied83kOEB7NJjXf1KfvmsQ2aEjy3xjiGg==",
+ "dev": true
+ },
+ "@mapbox/jsonlint-lines-primitives": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
+ "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ="
+ },
+ "@mapbox/mapbox-gl-style-spec": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.5.0.tgz",
+ "integrity": "sha512-EqkamGj4zYJxjoTuj5Ld/932z+nHRRcT3q4f5pMXWlG5ghqoUTw2/Uwp6DFYdYzAzzO/D4wD7H89ci81gA1zkA==",
+ "requires": {
+ "@mapbox/jsonlint-lines-primitives": "~2.0.2",
+ "@mapbox/unitbezier": "^0.0.0",
+ "csscolorparser": "~1.0.2",
+ "json-stringify-pretty-compact": "^1.2.0",
+ "minimist": "0.0.8",
+ "rw": "^1.3.3",
+ "sort-object": "^0.3.2"
+ }
+ },
+ "@mapbox/unitbezier": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
+ "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4="
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
+ "@parcel/fs": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.2"
+ }
+ },
+ "@parcel/logger": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.0.tgz",
+ "integrity": "sha512-lIRfDg+junbFUUeU0QtHX00gKCgEsYHZydFKwrJ8dc0D+WE2SYT1FcVCgpPAfKYgtg0QQMns8E9vzT9UjH92PQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/workers": "^1.11.0",
+ "chalk": "^2.1.0",
+ "grapheme-breaker": "^0.3.2",
+ "ora": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "@parcel/utils": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==",
+ "dev": true
+ },
+ "@parcel/watcher": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.11.0.tgz",
+ "integrity": "sha512-1ySF0sH06jyhpaErW1UWC7BNgkAl6PJyBjuu2cLTW1o71J2iQqgGt95cbuqmfmjI3l0xYN+nauDFqHERaj7Z8A==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "chokidar": "^2.0.3"
+ }
+ },
+ "@parcel/workers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "physical-cpu-count": "^2.0.0"
+ }
+ },
+ "@types/node": {
+ "version": "10.12.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
+ "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==",
+ "dev": true
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansi-to-html": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.9.tgz",
+ "integrity": "sha512-hwNdg2DNgCzsrvaNc+LDqSxJkpxf9oEt4R7KE0IeURXhEOlontEqNpXNiGeFBpSes8TZF+ZZ9sjB85QzjPsI6A==",
+ "dev": true,
+ "requires": {
+ "entities": "^1.1.1"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babylon-walk": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.11.6",
+ "babel-types": "^6.15.0",
+ "lodash.clone": "^4.5.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "dev": true
+ },
+ "bindings": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brfs": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
+ "dev": true,
+ "requires": {
+ "quote-stream": "^1.0.1",
+ "resolve": "^1.1.5",
+ "static-module": "^2.2.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+ "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
+ "dev": true
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz",
+ "integrity": "sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000928",
+ "electron-to-chromium": "^1.3.100",
+ "node-releases": "^1.1.3"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000929",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000929.tgz",
+ "integrity": "sha512-bap0KDH7KJ2Hc4zWb1bBJwsyl+76jOukW6TH8uxaVI7BrzF2CnibTj53ro7VZAHB+ucMlIGBC1rhG2BQY0ekeg==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000929",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000929.tgz",
+ "integrity": "sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+ "dev": true,
+ "optional": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "dev": true
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clones": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz",
+ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==",
+ "dev": true
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "codemirror": {
+ "version": "5.42.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.42.2.tgz",
+ "integrity": "sha512-Tkv6im39VuhduFMsDA3MlXcC/kKas3Z0PI1/8N88QvFQbtOeiiwnfFJE4juGyC8/a4sb1BSxQlzsil8XLQdxRw=="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz",
+ "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "dev": true,
+ "requires": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ }
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "command-exists": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+ "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz",
+ "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz",
+ "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-select": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+ "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^2.1.2",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.28",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
+ "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
+ "dev": true
+ },
+ "css-url-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
+ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
+ "dev": true
+ },
+ "css-what": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
+ "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==",
+ "dev": true
+ },
+ "csscolorparser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
+ "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs="
+ },
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz",
+ "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.6",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz",
+ "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.0",
+ "postcss-colormin": "^4.0.2",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.1",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.10",
+ "postcss-merge-rules": "^4.0.2",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.1",
+ "postcss-minify-params": "^4.0.1",
+ "postcss-minify-selectors": "^4.0.1",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.1",
+ "postcss-normalize-positions": "^4.0.1",
+ "postcss-normalize-repeat-style": "^4.0.1",
+ "postcss-normalize-string": "^4.0.1",
+ "postcss-normalize-timing-functions": "^4.0.1",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.1",
+ "postcss-ordered-values": "^4.1.1",
+ "postcss-reduce-initial": "^4.0.2",
+ "postcss-reduce-transforms": "^4.0.1",
+ "postcss-svgo": "^4.0.1",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true
+ },
+ "csso": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+ "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+ "dev": true,
+ "requires": {
+ "css-tree": "1.0.0-alpha.29"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.29",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+ "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "deasync": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.14.tgz",
+ "integrity": "sha512-wN8sIuEqIwyQh72AG7oY6YQODCxIp1eXzEZlZznBuwDF8Q03Tdy9QNp1BNZXeadXoklNrw+Ip1fch+KXo/+ASw==",
+ "dev": true,
+ "requires": {
+ "bindings": "~1.2.1",
+ "node-addon-api": "^1.6.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "optional": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ }
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true,
+ "optional": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true,
+ "optional": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
+ "dev": true
+ },
+ "dotenv-expand": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "editorconfig": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz",
+ "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^10.11.7",
+ "@types/semver": "^5.5.0",
+ "commander": "^2.19.0",
+ "lru-cache": "^4.1.3",
+ "semver": "^5.6.0",
+ "sigmund": "^1.0.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.103",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz",
+ "integrity": "sha512-tObPqGmY9X8MUM8i3MEimYmbnLLf05/QV5gPlkR8MQ3Uj8G8B2govE1U4cQcBYtv3ymck9Y8cIOu4waoiykMZQ==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "elm-hot": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.0.1.tgz",
+ "integrity": "sha512-C6VEX3TqVJv+OhUKMMb2mcaSuRArqvCFNItqxue81/mlfX4PWwvovE5vqocgO3AnrStyHElCRm0KNknfDttEBw==",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "^1.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "fast-glob": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
+ "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.6.tgz",
+ "integrity": "sha512-BalK54tfK0pMC0jQFb2oHn1nz7JNQD/2ex5pBnCHgBi2xG7VV0cAOGy2RS2VbCqUXx5/6obMrMcQTJ8yjcGzbg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz",
+ "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "grapheme-breaker": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
+ "dev": true,
+ "requires": {
+ "brfs": "^1.2.0",
+ "unicode-trie": "^0.3.1"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true,
+ "optional": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+ "dev": true
+ },
+ "htmlnano": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.1.10.tgz",
+ "integrity": "sha512-eTEUzz8VdWYp+w/KUdb99kwao4reR64epUySyZkQeepcyzPQ2n2EPWzibf6QDxmkGy10Kr+CKxYqI3izSbmhJQ==",
+ "dev": true,
+ "requires": {
+ "cssnano": "^3.4.0",
+ "object-assign": "^4.0.1",
+ "posthtml": "^0.11.3",
+ "posthtml-render": "^1.1.4",
+ "svgo": "^1.0.5",
+ "terser": "^3.8.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "dev": true,
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "^1.1.2"
+ }
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "dev": true,
+ "requires": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "dev": true,
+ "requires": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.16"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.5"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "dev": true,
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "dev": true,
+ "requires": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ },
+ "dependencies": {
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "requires": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+ "dev": true
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "dev": true,
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.0.tgz",
+ "integrity": "sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g==",
+ "dev": true
+ },
+ "js-beautify": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz",
+ "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==",
+ "dev": true,
+ "requires": {
+ "config-chain": "^1.1.12",
+ "editorconfig": "^0.15.2",
+ "glob": "^7.1.3",
+ "mkdirp": "~0.5.0",
+ "nopt": "~4.0.1"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-stringify-pretty-compact": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.2.0.tgz",
+ "integrity": "sha512-/11Pj1OyX814QMKO7K8l85SHPTr/KsFxHp8GE2zVa0BtJgGimDjXHfM3FhC7keQdWDea7+nXf+f1de7ATZcZkQ=="
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash.clone": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "dev": true,
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==",
+ "dev": true
+ },
+ "merge-source-map": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+ "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+ "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "needle": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
+ "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz",
+ "integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
+ "dev": true
+ },
+ "node-libs-browser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
+ "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz",
+ "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
+ "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
+ "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.12.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "opn": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "ora": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parcel-bundler": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.11.0.tgz",
+ "integrity": "sha512-H0w/Obx76vWiG+UtofznfcHZJBmd6JA5iCn7zrGBINyVAh+Nt/JLD6QDROghHLXfJkO4XyczsB+fO+nPbXlFfA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/core": "^7.0.0",
+ "@babel/generator": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.0.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.0.0",
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "@babel/runtime": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@iarna/toml": "^2.2.0",
+ "@parcel/fs": "^1.11.0",
+ "@parcel/logger": "^1.11.0",
+ "@parcel/utils": "^1.11.0",
+ "@parcel/watcher": "^1.11.0",
+ "@parcel/workers": "^1.11.0",
+ "ansi-to-html": "^0.6.4",
+ "babylon-walk": "^1.0.2",
+ "browserslist": "^4.1.0",
+ "chalk": "^2.1.0",
+ "clone": "^2.1.1",
+ "command-exists": "^1.2.6",
+ "commander": "^2.11.0",
+ "cross-spawn": "^6.0.4",
+ "cssnano": "^4.0.0",
+ "deasync": "^0.1.14",
+ "dotenv": "^5.0.0",
+ "dotenv-expand": "^4.2.0",
+ "fast-glob": "^2.2.2",
+ "filesize": "^3.6.0",
+ "get-port": "^3.2.0",
+ "htmlnano": "^0.1.9",
+ "is-glob": "^4.0.0",
+ "is-url": "^1.2.2",
+ "js-yaml": "^3.10.0",
+ "json5": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "node-forge": "^0.7.1",
+ "node-libs-browser": "^2.0.0",
+ "opn": "^5.1.0",
+ "postcss": "^7.0.5",
+ "postcss-value-parser": "^3.3.1",
+ "posthtml": "^0.11.2",
+ "posthtml-parser": "^0.4.0",
+ "posthtml-render": "^1.1.3",
+ "resolve": "^1.4.0",
+ "semver": "^5.4.1",
+ "serialize-to-js": "^1.1.1",
+ "serve-static": "^1.12.4",
+ "source-map": "0.6.1",
+ "terser": "^3.7.3",
+ "v8-compile-cache": "^2.0.0",
+ "ws": "^5.1.1"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.2.tgz",
+ "integrity": "sha512-zVAb35DsNvwINEA7EEK+78YoNDGRpYEAGoIl3bSHyI9OU4IIrrrU5DC4xaCLZ42gvOfQg1+wS778WbJW+mCMCQ==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "physical-cpu-count": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.13",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz",
+ "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+ "dev": true,
+ "requires": {
+ "css-unit-converter": "^1.1.1",
+ "postcss": "^7.0.5",
+ "postcss-selector-parser": "^5.0.0-rc.4",
+ "postcss-value-parser": "^3.3.1"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz",
+ "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz",
+ "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz",
+ "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz",
+ "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "dev": true
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz",
+ "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz",
+ "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz",
+ "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz",
+ "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz",
+ "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz",
+ "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz",
+ "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz",
+ "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz",
+ "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz",
+ "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "dev": true,
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz",
+ "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz",
+ "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz",
+ "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==",
+ "dev": true,
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "posthtml": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.3.tgz",
+ "integrity": "sha512-quMHnDckt2DQ9lRi6bYLnuyBDnVzK+McHa8+ar4kTdYbWEo/92hREOu3h70ZirudOOp/my2b3r0m5YtxY52yrA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "posthtml-parser": "^0.3.3",
+ "posthtml-render": "^1.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.3.3.tgz",
+ "integrity": "sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "isobject": "^2.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.1.tgz",
+ "integrity": "sha512-h7vXIQ21Ikz2w5wPClPakNP6mJeJCK6BT0GpqnQrNNABdR7/TchNlFyryL1Bz6Ww53YWCKkr6tdZuHlxY1AVdQ==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.1.4.tgz",
+ "integrity": "sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "quote-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "minimist": "^1.1.3",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpu-core": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
+ "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz",
+ "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "safer-eval": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.0.tgz",
+ "integrity": "sha512-4qkBS8VzJatFR7F0eZfKoJyjqo43jY1jBvRhB5WXM0eJNjx9fiSmph5NApJefqKqpASKWPfaIJCJMMeWePSzfw==",
+ "dev": true,
+ "requires": {
+ "clones": "^1.2.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "serialize-to-js": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz",
+ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==",
+ "dev": true,
+ "requires": {
+ "js-beautify": "^1.8.9",
+ "safer-eval": "^1.3.0"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true,
+ "optional": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-copy": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sort-asc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz",
+ "integrity": "sha1-q3md9h/HPqCVbHnEtTHtHp53J+k="
+ },
+ "sort-desc": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz",
+ "integrity": "sha1-GYuMDN6wlcRjNBhh45JdTuNZqe4="
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "sort-object": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz",
+ "integrity": "sha1-mODRme3kDgfGGoRAPGHWw7KQ+eI=",
+ "requires": {
+ "sort-asc": "^0.1.0",
+ "sort-desc": "^0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "static-eval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz",
+ "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==",
+ "dev": true,
+ "requires": {
+ "escodegen": "^1.8.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "static-module": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "~1.6.0",
+ "convert-source-map": "^1.5.1",
+ "duplexer2": "~0.1.4",
+ "escodegen": "~1.9.0",
+ "falafel": "^2.1.0",
+ "has": "^1.0.1",
+ "magic-string": "^0.22.4",
+ "merge-source-map": "1.0.4",
+ "object-inspect": "~1.4.0",
+ "quote-stream": "~1.0.2",
+ "readable-stream": "~2.3.3",
+ "shallow-copy": "~0.0.1",
+ "static-eval": "^2.0.0",
+ "through2": "~2.0.3"
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "optional": true
+ },
+ "stylehacks": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz",
+ "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svgo": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz",
+ "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==",
+ "dev": true,
+ "requires": {
+ "coa": "~2.0.1",
+ "colors": "~1.1.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "~0.1.0",
+ "css-tree": "1.0.0-alpha.28",
+ "css-url-regex": "^1.1.0",
+ "csso": "^3.5.0",
+ "js-yaml": "^3.12.0",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.0.4",
+ "sax": "~1.2.4",
+ "stable": "~0.1.6",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ }
+ },
+ "tar": {
+ "version": "4.4.8",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+ "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "terser": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz",
+ "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.6"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tiny-inflate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz",
+ "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+ "dev": true
+ },
+ "unicode-trie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
+ "dev": true,
+ "requires": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "v8-compile-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
+ "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==",
+ "dev": true
+ },
+ "vendors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
+ "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
+ "dev": true
+ },
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+ "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+ "dev": true
+ }
+ }
+}
diff --git a/style-generator/package.json b/style-generator/package.json
new file mode 100644
index 0000000..a765962
--- /dev/null
+++ b/style-generator/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "elm-mapbox-style-generator",
+ "version": "1.0.0",
+ "description": "Generate styles",
+ "main": "index.js",
+ "scripts": {
+ "test": "elm-test",
+ "start": "parcel index.html",
+ "build": "parcel build index.html --out-dir ../docs/style-generator"
+ },
+ "keywords": [
+ "mapbox",
+ "style-spec"
+ ],
+ "author": "Jakub Hampl kopomir@gmail.com",
+ "license": "MIT",
+ "dependencies": {
+ "@mapbox/mapbox-gl-style-spec": "^13.5.0",
+ "codemirror": "^5.42.2"
+ },
+ "devDependencies": {
+ "elm-hot": "^1.0.1",
+ "parcel-bundler": "^1.11.0"
+ }
+}
diff --git a/style-generator/readme.md b/style-generator/readme.md
new file mode 100644
index 0000000..5d5397f
--- /dev/null
+++ b/style-generator/readme.md
@@ -0,0 +1,7 @@
+# Elm-mapbox code generator
+
+The purpose of this tool is to close the loop with Mapbox Studio and have nice Elm code expressing a Map Style.
+
+It is also an interesting sample of a highly complex JSON Decoder.
+
+Of interest is the Code Generation library MyElm, which will likely be released as a standalone package at some point in the future.
diff --git a/style-generator/src/Color.elm b/style-generator/src/Color.elm
index b4e8b73..b1c0f59 100644
--- a/style-generator/src/Color.elm
+++ b/style-generator/src/Color.elm
@@ -13,13 +13,111 @@ parser =
oneOf
[ keywords
, hsla
-
- -- , rgba
- -- , hex
+ , rgba
+ , hex
]
|. end
+hexNumber =
+ Parser.number
+ { int = Nothing
+ , hex = Just identity
+ , octal = Nothing
+ , binary = Nothing
+ , float = Nothing
+ }
+
+
+hexDigit : Parser Int
+hexDigit =
+ oneOf
+ [ succeed 0 |. symbol "0"
+ , succeed 1 |. symbol "1"
+ , succeed 2 |. symbol "2"
+ , succeed 3 |. symbol "3"
+ , succeed 4 |. symbol "4"
+ , succeed 5 |. symbol "5"
+ , succeed 6 |. symbol "6"
+ , succeed 7 |. symbol "7"
+ , succeed 8 |. symbol "8"
+ , succeed 9 |. symbol "9"
+ , succeed 10 |. symbol "A"
+ , succeed 11 |. symbol "B"
+ , succeed 12 |. symbol "C"
+ , succeed 13 |. symbol "D"
+ , succeed 14 |. symbol "E"
+ , succeed 15 |. symbol "F"
+ , succeed 10 |. symbol "a"
+ , succeed 11 |. symbol "b"
+ , succeed 12 |. symbol "c"
+ , succeed 13 |. symbol "d"
+ , succeed 14 |. symbol "e"
+ , succeed 15 |. symbol "f"
+ ]
+
+
+twoDigits : Int -> Int -> Int
+twoDigits a b =
+ Bitwise.shiftLeftBy 4 a + b
+
+
+hex : Parser Color
+hex =
+ succeed
+ (\a b c maybe ->
+ case maybe of
+ Just ( d, e, f ) ->
+ { r = twoDigits a b
+ , g = twoDigits c d
+ , b = twoDigits e f
+ , a = 1
+ }
+
+ Nothing ->
+ { r = twoDigits a a
+ , g = twoDigits b b
+ , b = twoDigits c c
+ , a = 1
+ }
+ )
+ |. symbol "#"
+ |= hexDigit
+ |= hexDigit
+ |= hexDigit
+ |= oneOf
+ [ succeed (\a b c -> Just ( a, b, c ))
+ |= hexDigit
+ |= hexDigit
+ |= hexDigit
+ , succeed Nothing
+ ]
+
+
+rgba : Parser Color
+rgba =
+ succeed Color
+ |. oneOf [ keyword "rgba", keyword "rgb" ]
+ |. symbol "("
+ |= Parser.int
+ |. spaces
+ |. symbol ","
+ |. spaces
+ |= Parser.int
+ |. spaces
+ |. symbol ","
+ |. spaces
+ |= Parser.int
+ |= oneOf
+ [ succeed identity
+ |. symbol ","
+ |. spaces
+ |= Parser.float
+ , succeed 1
+ ]
+ |. symbol ")"
+
+
fromHSLA hue sat light alpha =
let
( h, s, l ) =
diff --git a/style-generator/src/Decoder.elm b/style-generator/src/Decoder.elm
index 65dc0a2..5acb722 100644
--- a/style-generator/src/Decoder.elm
+++ b/style-generator/src/Decoder.elm
@@ -1,104 +1,74 @@
module Decoder exposing (styleCode)
-import Color
-import Elm.Syntax.Declaration exposing (Declaration(..))
-import Elm.Syntax.Exposing exposing (Exposing(..), TopLevelExpose(..))
-import Elm.Syntax.Expression exposing (Expression(..), RecordSetter)
-import Elm.Syntax.Infix exposing (InfixDirection(..))
-import Elm.Syntax.Module exposing (Module(..))
-import Elm.Syntax.Node exposing (Node(..))
-import Elm.Syntax.Pattern
-import Elm.Syntax.Range exposing (emptyRange)
-import Elm.Syntax.TypeAnnotation exposing (TypeAnnotation(..))
+import Decoder.Expression as Decode
+import Decoder.Generic as Decode
+import Decoder.Helpers exposing (todo)
+import Decoder.Legacy
import Json.Decode as D exposing (Decoder)
-import Json.Encode
+import Lib
+import MyElm.Advanced as Advanced
+import MyElm.Syntax exposing (..)
import String.Case exposing (toCamelCaseLower)
-import Writer
-node =
- Node emptyRange
+styleNs =
+ [ "Mapbox", "Style" ]
-wrapNodes =
- List.map node
+layerNs =
+ [ "Mapbox", "Layer" ]
+
+
+sourceNs =
+ [ "Mapbox", "Source" ]
+
+
+styleName nm =
+ Advanced.aliasedName
+ { modulePath = styleNs
+ , aliasName =
+ "Style"
+ , name = nm
+ , typeName = Nothing
+ }
+
+
+layerName nm =
+ Advanced.aliasedName
+ { modulePath = layerNs
+ , aliasName =
+ "Layer"
+ , name = nm
+ , typeName = Nothing
+ }
styleCode : Decoder String
styleCode =
- D.map (file >> Writer.writeFile >> Writer.write) style
+ D.map file style
declarations styleDec =
- [ FunctionDeclaration
- { documentation = Nothing
- , signature =
- Just
- (node
- { name = node "style"
- , typeAnnotation = node (Typed (node ( [], "Style" )) [])
- }
- )
- , declaration =
- node
- { name = node "style"
- , arguments = []
- , expression =
- node <|
- Application <|
- wrapNodes
- [ FunctionOrValue [] "Style"
- , RecordExpr styleDec
- ]
- }
- }
- ]
+ [ variable "style" (type0 (typeName styleNs "Style")) (call1 (constructorName [ "Mapbox", "Style" ] "Style" "Style") (record styleDec)) ]
file styleDec =
- { moduleDefinition =
- node
- (NormalModule
- { moduleName = node [ "Style" ]
- , exposingList = node (Explicit [ node (FunctionExpose "style") ])
- }
- )
- , imports =
- [ node
- { moduleName = node [ "Mapbox", "Style" ]
- , moduleAlias = Just (node [ "Style" ])
- , exposingList = Just (Explicit [ node (TypeExpose { name = "Style", open = Just emptyRange }) ])
- }
- , node
- { moduleName = node [ "Mapbox", "Source" ]
- , moduleAlias = Just (node [ "Source" ])
- , exposingList = Nothing
- }
- , node
- { moduleName = node [ "Mapbox", "Layer" ]
- , moduleAlias = Just (node [ "Layer" ])
- , exposingList = Nothing
- }
- , node
- { moduleName = node [ "Mapbox", "Expression" ]
- , moduleAlias = Just (node [ "E" ])
- , exposingList = Just (Explicit [ node (FunctionExpose "str"), node (FunctionExpose "float"), node (FunctionExpose "int"), node (FunctionExpose "true"), node (FunctionExpose "false") ])
- }
- ]
- , declarations = List.map node (declarations styleDec)
- , comments = []
- }
-
-
-style : Decoder (List (Node RecordSetter))
+ build
+ { name = [ "Style" ]
+ , exposes = [ exposeFn "style" ]
+ , doc = Nothing
+ , declarations = declarations styleDec
+ }
+
+
style =
D.map5
(\transition light layers sources misc ->
- [ node ( node "transition", transition )
- , node ( node "light", light )
- , node ( node "layers", layers )
- , node ( node "sources", sources )
- , node ( node "misc", misc )
+ [ ( "transition", transition )
+ , ( "light", light )
+ , ( "layers", layers )
+ , ( "sources", sources )
+ , ( "misc", misc )
]
)
(D.oneOf
@@ -116,48 +86,38 @@ style =
decodeMisc
-decodeTransition : Decoder (Node Expression)
decodeTransition =
D.map2
(\duration delay ->
- node
- (RecordExpr
- [ node ( node "duration", node (Integer duration) )
- , node ( node "delay", node (Integer delay) )
- ]
- )
+ record
+ [ ( "duration", int duration )
+ , ( "delay", int delay )
+ ]
)
(D.oneOf [ D.field "duration" D.int, D.succeed 300 ])
(D.oneOf [ D.field "delay" D.int, D.succeed 0 ])
-decodeLight : Decoder (Node Expression)
decodeLight =
valueDecoder "Style" "defaultLight"
-addBogusRange index (Node _ v) =
- Node { start = { row = index, column = 0 }, end = { row = index + 1, column = 0 } } v
-
-
-decodeLayers : Decoder (Node Expression)
decodeLayers =
D.list decodeLayer
- |> D.map (\layers -> node (ListExpr (List.indexedMap addBogusRange layers)))
+ |> D.map list
layerDecodeHelp t =
- D.map3 (\id source attrs -> call "Layer" t [ str id, str source, list attrs ]) (D.field "id" D.string) (D.field "source" D.string) decodeAttrs
+ D.map3 (\id source attrs -> call3 (layerName t) (string id) (string source) (list attrs)) (D.field "id" D.string) (D.field "source" D.string) decodeAttrs
-decodeLayer : Decoder (Node Expression)
decodeLayer =
D.field "type" D.string
|> D.andThen
(\t ->
case t of
"background" ->
- D.map2 (\id attrs -> call "Layer" "background" [ str id, list attrs ]) (D.field "id" D.string) decodeAttrs
+ D.map2 (\id attrs -> call2 (layerName "background") (string id) (list attrs)) (D.field "id" D.string) decodeAttrs
"fill" ->
layerDecodeHelp "fill"
@@ -188,9 +148,8 @@ decodeLayer =
)
-decodeAttrs : Decoder (List (Node Expression))
decodeAttrs =
- D.map3 (\top paint layout -> top ++ paint ++ layout) (D.keyValuePairs D.value) (D.field "paint" (D.keyValuePairs D.value)) (D.field "layout" (D.keyValuePairs D.value))
+ D.map3 (\top paint layout -> top ++ paint ++ layout) (D.keyValuePairs D.value) (Decode.withDefault [] (D.field "paint" (D.keyValuePairs D.value))) (Decode.withDefault [] (D.field "layout" (D.keyValuePairs D.value)))
|> D.andThen
(List.filterMap
(\( attrName, attrValue ) ->
@@ -210,8 +169,11 @@ decodeAttrs =
"layout" ->
Nothing
+ "metadata" ->
+ Nothing
+
"source-layer" ->
- decodeAttr "sourceLayer" (D.map str D.string) attrValue
+ decodeAttr "sourceLayer" (D.map string D.string) attrValue
"minzoom" ->
decodeAttr "minzoom" (D.map float D.float) attrValue
@@ -220,472 +182,29 @@ decodeAttrs =
decodeAttr "maxzoom" (D.map float D.float) attrValue
"filter" ->
- decodeAttr "filter" (D.oneOf [ decodeLegacyFilter, decodeValue ]) attrValue
+ decodeAttr "filter" (D.oneOf [ Decoder.Legacy.filter, Decode.expression ]) attrValue
other ->
- decodeAttr (toCamelCaseLower attrName) decodeValue attrValue
+ decodeAttr (toCamelCaseLower attrName) Decode.expression attrValue
)
- >> combine
+ >> Decode.combine
)
- |> D.map (List.indexedMap addBogusRange)
-decodeAttr : String -> Decoder (Node Expression) -> D.Value -> Maybe (Decoder (Node Expression))
decodeAttr attrName expressionNodeDecoder attrValue =
Just
(D.decodeValue expressionNodeDecoder attrValue
- |> resultToDecoder
- |> D.map (\v -> call "Layer" (toCamelCaseLower attrName) [ v ])
+ |> Decode.resultToDecoder
+ |> D.map (call1 (layerName (toCamelCaseLower attrName)))
)
-resultToDecoder : Result D.Error a -> Decoder a
-resultToDecoder res =
- case res of
- Ok a ->
- D.succeed a
-
- Err e ->
- D.fail (D.errorToString e)
-
-
-decodeBool : Decoder (Node Expression)
-decodeBool =
- D.bool
- |> D.map
- (\b ->
- if b then
- evalue "true"
- else
- evalue "false"
- )
-
-
-decodeValue : Decoder (Node Expression)
-decodeValue =
- D.oneOf
- [ D.string |> D.map makeConstant
- , decodeBool
- , D.float |> D.map (Floatable >> node >> ecall "float")
- , D.int |> D.map (Integer >> node >> ecall "int")
- , D.index 0 D.string |> D.andThen decodeExpression
- , todo
- ]
- |> D.map (ParenthesizedExpression >> node)
-
-
-makeConstant s =
- case s of
- "map" ->
- value "E" "anchorMap"
-
- "viewport" ->
- value "E" "anchorViewport"
-
- "auto" ->
- value "E" "anchorAuto"
-
- "center" ->
- value "E" "positionCenter"
-
- "left" ->
- value "E" "positionLeft"
-
- "right" ->
- value "E" "positionRight"
-
- "top" ->
- value "E" "positionTop"
-
- "bottom" ->
- value "E" "positionBottom"
-
- "topRight" ->
- value "E" "positionTopRight"
-
- "topLeft" ->
- value "E" "positionTopLeft"
-
- "bottomLeft" ->
- value "E" "positionBottomLeft"
-
- "bottomRight" ->
- value "E" "positionBottomRight"
-
- "none" ->
- value "E" "textFitNone"
-
- "width" ->
- value "E" "textFitWidth"
-
- "height" ->
- value "E" "textFitHeight"
-
- "both" ->
- value "E" "textFitBoth"
-
- "butt" ->
- value "E" "lineCapButt"
-
- "round" ->
- value "E" "lineCapRound"
-
- "square" ->
- value "E" "lineCapSquare"
-
- "bevel" ->
- value "E" "lineJoinBevel"
-
- "miter" ->
- value "E" "lineJoinMiter"
-
- "point" ->
- value "E" "symbolPlacementPoint"
-
- "line-center" ->
- value "E" "symbolPlacementLineCenter"
-
- "line" ->
- value "E" "symbolPlacementLine"
-
- "uppercase" ->
- value "E" "textTransformUppercase"
-
- "lowercase" ->
- value "E" "textTransformLowercase"
-
- "linear" ->
- value "E" "rasterResamplingLinear"
-
- "nearest" ->
- value "E" "rasterResamplingNearest"
-
- _ ->
- case Color.parse s of
- Ok { r, g, b, a } ->
- call "E" "rgba" [ integer r, integer g, integer b, float a ]
-
- Err err ->
- str s |> ecall "str"
-
-
-
--- legacy filter
-
-
-decodeLegacyFilter : Decoder (Node Expression)
-decodeLegacyFilter =
- let
- decodeProp =
- D.index 1 D.string
- |> D.map
- (\prop ->
- case prop of
- "$type" ->
- value "E" "geometryType"
-
- "$id" ->
- value "E" "id"
-
- _ ->
- call "E" "getProperty" [ ecall "str" (str prop) ]
- )
-
- decodeVal =
- D.index 2 <|
- D.oneOf
- [ D.map (str >> ecall "str") D.string
- , D.map (float >> ecall "float") D.float
- , decodeBool
- ]
-
- decodeVals =
- D.list <|
- D.oneOf
- [ D.map (str >> ecall "str") D.string
- , D.map (float >> ecall "float") D.float
- , decodeBool
- ]
- in
- D.index 0 D.string
- |> D.andThen
- (\filter ->
- case filter of
- "all" ->
- decodeTail decodeLegacyFilter |> D.map (\filters -> call "E" "all" [ list filters ])
-
- "any" ->
- decodeTail decodeLegacyFilter |> D.map (\filters -> call "E" "any" [ list filters ])
-
- "none" ->
- decodeTail decodeLegacyFilter |> D.map (\filters -> call "E" "all" [ list (List.map (\f -> call "E" "not" [ f ]) filters) ])
-
- "has" ->
- D.index 1 D.string |> D.map (\prop -> call "E" "hasProperty" [ ecall "str" (str prop) ])
-
- "!has" ->
- D.index 1 D.string |> D.map (\prop -> call "E" "not" [ call "E" "hasProperty" [ ecall "str" (str prop) ] ])
-
- "==" ->
- D.map2 (\prop val -> pipelineCall "E" "isEqual" [ prop, val ]) decodeProp decodeVal
-
- "!=" ->
- D.map2 (\prop val -> pipelineCall "E" "notEqual" [ prop, val ]) decodeProp decodeVal
-
- ">" ->
- D.map2 (\prop val -> pipelineCall "E" "greaterThan" [ prop, val ]) decodeProp decodeVal
-
- ">=" ->
- D.map2 (\prop val -> pipelineCall "E" "greaterThanOrEqual" [ prop, val ]) decodeProp decodeVal
-
- "<" ->
- D.map2 (\prop val -> pipelineCall "E" "lessThan" [ prop, val ]) decodeProp decodeVal
-
- "<=" ->
- D.map2 (\prop val -> pipelineCall "E" "lessThanOrEqual" [ prop, val ]) decodeProp decodeVal
-
- "in" ->
- D.map2
- (\prop values ->
- List.drop 2 values
- |> List.map (\v -> pipelineCall "E" "isEqual" [ prop, v ])
- |> list
- |> List.singleton
- |> call "E" "any"
- )
- decodeProp
- decodeVals
-
- "!in" ->
- D.map2
- (\prop values ->
- List.drop 2 values
- |> List.map (\v -> pipelineCall "E" "notEqual" [ prop, v ])
- |> list
- |> List.singleton
- |> call "E" "all"
- )
- decodeProp
- decodeVals
-
- _ ->
- D.fail "not actually a legacy filter"
- )
-
-
-
--- Expressions
-
-
-decodeTail : Decoder a -> Decoder (List a)
-decodeTail itemDecoder =
- D.list D.value
- |> D.andThen
- (\l ->
- case l of
- [] ->
- D.fail "Can't get tail of empty"
-
- head :: t ->
- List.map (subdecode itemDecoder) t |> combine
- )
-
-
-subdecode : Decoder a -> D.Value -> Decoder a
-subdecode d v =
- D.decodeValue d v |> resultToDecoder
-
-
-decodeMatch : Bool -> any -> Decoder (Node Expression)
-decodeMatch isString _ =
- decodeTail D.value
- |> D.andThen
- (\args ->
- case args of
- [] ->
- todo
-
- head :: tail ->
- D.map2
- (\cond rest ->
- parens
- (node
- (OperatorApplication "|>"
- Right
- cond
- (call "E"
- (if isString then
- "matchesStr"
- else
- "matchesFloat"
- )
- rest
- )
- )
- )
- )
- (subdecode decodeValue head)
- (organizeArgs
- (if isString then
- D.map str D.string
- else
- D.map float D.float
- )
- []
- tail
- )
- )
-
-
-organizeArgs : Decoder (Node Expression) -> List (Decoder (Node Expression)) -> List D.Value -> Decoder (List (Node Expression))
-organizeArgs inpDec accu args =
- case args of
- [] ->
- combine [ D.map list (List.reverse accu |> combine) ]
-
- [ default ] ->
- combine [ D.map list (List.reverse accu |> combine), subdecode decodeValue default ]
-
- a :: b :: rest ->
- let
- newAccu =
- D.map2
- (\inp out ->
- parens (node (TupledExpression [ inp, out ]))
- )
- (subdecode inpDec a)
- (subdecode decodeValue b)
- :: accu
- in
- organizeArgs inpDec newAccu rest
-
-
-decodeExpression : String -> Decoder (Node Expression)
-decodeExpression funName =
- case funName of
- "literal" ->
- D.index 1
- (D.oneOf
- [ D.list D.string |> D.map (\strs -> call "E" "strings" [ list (List.map str strs) ])
- , D.list D.float |> D.map (\floats -> call "E" "floats" [ list (List.map float floats) ])
- ]
- )
-
- "match" ->
- D.oneOf
- [ D.index 2 D.string |> D.andThen (decodeMatch True)
- , D.index 2 D.float |> D.andThen (decodeMatch False)
- ]
-
- "exponential" ->
- D.map (\base -> call "E" "Exponential" [ float base ]) (D.index 1 D.float)
-
- "interpolate" ->
- D.map3
- (\interpolation options input ->
- pipelineCall "E" "interpolate" (input :: interpolation :: options)
- )
- (D.index 1 decodeValue)
- (decodeTail D.value |> D.map (List.drop 2) |> D.andThen (organizeArgs (D.map float D.float) []))
- (D.index 2 decodeValue)
-
- "step" ->
- D.map3
- (\inp def stps ->
- pipelineCall "E" "step" (inp :: def :: stps)
- )
- (D.index 1 decodeValue)
- (D.index 2 decodeValue)
- (decodeTail D.value |> D.map (List.drop 2) |> D.andThen (organizeArgs (D.map float D.float) []))
-
- _ ->
- let
- fallback =
- decodeTail decodeValue
- |> D.map
- (\arguments ->
- case funName of
- "==" ->
- pipelineCall "E" "isEqual" arguments
-
- "!=" ->
- pipelineCall "E" "notEqual" arguments
-
- "!has" ->
- todoExpr "!has is not supported"
-
- "!in" ->
- todoExpr "!in is not supported"
-
- "in" ->
- todoExpr "in is not supported"
-
- ">=" ->
- pipelineCall "E" "greaterThanOrEqual" arguments
-
- "<=" ->
- pipelineCall "E" "lessThanOrEqual" arguments
-
- "concat" ->
- pipelineCall "E" "append" arguments
-
- "linear" ->
- call "E" "Linear" arguments
-
- "rgb" ->
- call "E" "makeRGBColor" arguments
-
- "rgba" ->
- call "E" "makeRGBAColor" arguments
-
- "to-rgba" ->
- call "E" "rgbaChannels" arguments
-
- "-" ->
- pipelineCall "E" "minus" arguments
-
- "*" ->
- pipelineCall "E" "multiply" arguments
-
- "+" ->
- pipelineCall "E" "plus" arguments
-
- "/" ->
- pipelineCall "E" "divideBy" arguments
-
- "%" ->
- pipelineCall "E" "modBy" arguments
-
- "^" ->
- pipelineCall "E" "raiseBy" arguments
-
- "get" ->
- if List.length arguments == 1 then
- call "E" "getProperty" arguments
- else
- call "E" "get" arguments
-
- _ ->
- call "E" (toCamelCaseLower funName) arguments
- )
- in
- if String.toLower funName /= funName then
- D.oneOf
- [ D.map (\strs -> call "E" "strings" [ list (List.map str strs) ]) <| D.list D.string
- , fallback
- ]
- else
- fallback
-
-
-decodeSources : Decoder (Node Expression)
decodeSources =
D.keyValuePairs decodeSource
|> D.map (List.map (\( key, fn ) -> fn key))
- |> D.map (\sources -> node (ListExpr sources))
+ |> D.map list
-decodeSource : Decoder (String -> Node Expression)
decodeSource =
D.field "type" D.string
|> D.andThen
@@ -696,81 +215,45 @@ decodeSource =
|> D.map
(\url ->
\id ->
- call "Source"
- "vectorFromUrl"
- [ str id
- , str url
- ]
+ call2 (Advanced.aliasedName { modulePath = sourceNs, aliasName = "Source", name = "vectorFromUrl", typeName = Nothing })
+ (string id)
+ (string url)
)
+ "raster" ->
+ D.map
+ (\url ->
+ \id ->
+ call2 (Advanced.aliasedName { modulePath = sourceNs, aliasName = "Source", name = "rasterFromUrl", typeName = Nothing })
+ (string id)
+ (string url)
+ )
+ (D.field "url" D.string)
+
_ ->
- D.succeed (\a -> todoExpr ("type " ++ t ++ "not yet supported"))
+ D.succeed (\a -> Lib.todo ("type " ++ t ++ " not yet supported"))
)
-decodeMisc : Decoder (Node Expression)
decodeMisc =
- D.succeed (node (ListExpr []))
-
-
-list l =
- node (ListExpr l)
-
+ D.map6 (\sprite glyphs name zoom bearing pitch -> [ sprite, glyphs, name, zoom, bearing, pitch ] |> List.filterMap identity |> list)
+ (miscField "sprite" "sprite" D.string string)
+ (miscField "glyphs" "glyphs" D.string string)
+ (miscField "name" "name" D.string string)
+ (miscField "zoom" "defaultZoomLevel" D.float float)
+ (miscField "bearing" "defaultBearing" D.float float)
+ (miscField "pitch" "defaultPitch" D.float float)
-str s =
- node (Literal s)
+miscField : String -> String -> Decoder a -> (a -> Expression) -> Decoder (Maybe Expression)
+miscField name elmName decoder toExpr =
+ D.maybe (D.field name (D.map (\item -> call1 (styleName elmName) (toExpr item)) decoder))
-ecall name arg =
- parens (node (Application [ node (FunctionOrValue [] name), arg ]))
-call ns name args =
- parens (node (Application (node (FunctionOrValue [ ns ] name) :: args)))
-
-
-pipelineCall ns name args =
- case args of
- fst :: rest ->
- parens (node (OperatorApplication "|>" Left fst (call ns name rest)))
-
- _ ->
- todoExpr <| "Wrong number of arguments passed to " ++ ns ++ "." ++ name
-
-
-value ns name =
- node (FunctionOrValue [ ns ] name)
-
-
-evalue name =
- node (FunctionOrValue [] name)
-
-
-integer =
- Integer >> node
-
-
-float =
- Floatable >> node
-
-
-parens =
- ParenthesizedExpression >> node
+-- (D.field "center" D.maybe (D.map (\sprite -> call1 (styleName "defaultCenter") (str sprite) )) D.string)
+--
valueDecoder ns name =
- D.succeed (node (FunctionOrValue [ ns ] name))
-
-
-todo : Decoder (Node Expression)
-todo =
- D.map (\val -> todoExpr ("The expression " ++ Json.Encode.encode 0 val ++ " is not yet supported")) D.value
-
-
-todoExpr msg =
- node (ParenthesizedExpression (call "Debug" "todo" [ str msg ]))
-
-
-combine : List (Decoder a) -> Decoder (List a)
-combine =
- List.foldr (D.map2 (::)) (D.succeed [])
+ D.succeed (call0 (Advanced.aliasedName { modulePath = [ "Mapbox", ns ], aliasName = ns, name = name, typeName = Nothing }))
diff --git a/style-generator/src/Decoder/Expression.elm b/style-generator/src/Decoder/Expression.elm
new file mode 100644
index 0000000..137ab26
--- /dev/null
+++ b/style-generator/src/Decoder/Expression.elm
@@ -0,0 +1,345 @@
+module Decoder.Expression exposing (decodeBool, expression)
+
+import Color
+import Decoder.Generic as Decode
+import Decoder.Helpers exposing (todo)
+import Json.Decode as D exposing (Decoder)
+import Lib
+import MyElm.Syntax exposing (Expression, call1, calln, float, int, list, pair, string)
+import String.Case exposing (toCamelCaseLower)
+
+
+expression =
+ D.oneOf
+ [ D.string |> D.map makeConstant
+ , decodeBool
+ , D.float |> D.map (float >> Lib.float)
+ , D.int |> D.map (int >> Lib.int)
+ , D.index 0 D.string |> D.andThen decodeExpression
+ , D.index 0 D.int |> D.andThen (always (D.map (List.map int >> list >> Lib.floats) (D.list D.int)))
+ , D.index 0 D.float |> D.andThen (always (D.map (List.map float >> list >> Lib.floats) (D.list D.float)))
+ , todo
+ ]
+
+
+decodeLiteral =
+ D.oneOf
+ [ D.string |> D.map makeConstant
+ , decodeBool
+ , D.float |> D.map (float >> Lib.float)
+ , D.int |> D.map (int >> Lib.int)
+ , todo
+ ]
+
+
+makeConstant s =
+ case s of
+ "map" ->
+ Lib.eValue "anchorMap"
+
+ "viewport" ->
+ Lib.eValue "anchorViewport"
+
+ "auto" ->
+ Lib.eValue "anchorAuto"
+
+ "center" ->
+ Lib.eValue "positionCenter"
+
+ "left" ->
+ Lib.eValue "positionLeft"
+
+ "right" ->
+ Lib.eValue "positionRight"
+
+ "top" ->
+ Lib.eValue "positionTop"
+
+ "bottom" ->
+ Lib.eValue "positionBottom"
+
+ "topRight" ->
+ Lib.eValue "positionTopRight"
+
+ "topLeft" ->
+ Lib.eValue "positionTopLeft"
+
+ "bottomLeft" ->
+ Lib.eValue "positionBottomLeft"
+
+ "bottomRight" ->
+ Lib.eValue "positionBottomRight"
+
+ "none" ->
+ Lib.eValue "textFitNone"
+
+ "width" ->
+ Lib.eValue "textFitWidth"
+
+ "height" ->
+ Lib.eValue "textFitHeight"
+
+ "both" ->
+ Lib.eValue "textFitBoth"
+
+ "butt" ->
+ Lib.eValue "lineCapButt"
+
+ "round" ->
+ Lib.eValue "lineCapRound"
+
+ "square" ->
+ Lib.eValue "lineCapSquare"
+
+ "bevel" ->
+ Lib.eValue "lineJoinBevel"
+
+ "miter" ->
+ Lib.eValue "lineJoinMiter"
+
+ "point" ->
+ Lib.eValue "symbolPlacementPoint"
+
+ "line-center" ->
+ Lib.eValue "symbolPlacementLineCenter"
+
+ "line" ->
+ Lib.eValue "symbolPlacementLine"
+
+ "uppercase" ->
+ Lib.eValue "textTransformUppercase"
+
+ "lowercase" ->
+ Lib.eValue "textTransformLowercase"
+
+ "linear" ->
+ Lib.eValue "rasterResamplingLinear"
+
+ "nearest" ->
+ Lib.eValue "rasterResamplingNearest"
+
+ _ ->
+ case Color.parse s of
+ Ok { r, g, b, a } ->
+ calln (Lib.eName "rgba") [ int r, int g, int b, float a ]
+
+ Err err ->
+ string s |> Lib.str
+
+
+decodeExpression funName =
+ case funName of
+ "literal" ->
+ D.index 1
+ (D.oneOf
+ [ D.list D.string |> D.map (\strs -> calln (Lib.eName "strings") [ list (List.map string strs) ])
+ , D.list D.float |> D.map (\floats -> calln (Lib.eName "floats") [ list (List.map float floats) ])
+ ]
+ )
+
+ "match" ->
+ D.oneOf
+ [ D.index 2 D.string |> D.andThen (decodeMatch True)
+ , D.index 2 D.float |> D.andThen (decodeMatch False)
+ , D.index 2 (D.list D.string) |> D.andThen (decodeMatch True)
+ , D.index 2 (D.list D.float) |> D.andThen (decodeMatch False)
+ ]
+
+ "exponential" ->
+ D.map (\base -> calln (Lib.eName "Exponential") [ float base ]) (D.index 1 D.float)
+
+ "interpolate" ->
+ D.map3
+ (\interpolation options input ->
+ Lib.pipelineCall "interpolate" (input :: interpolation :: options)
+ )
+ (D.index 1 expression)
+ (Decode.tail D.value |> D.map (List.drop 2) |> D.andThen (organizeArgs (D.map float D.float) []))
+ (D.index 2 expression)
+
+ "step" ->
+ D.map3
+ (\inp def stps ->
+ Lib.pipelineCall "step" (inp :: def :: stps)
+ )
+ (D.index 1 expression)
+ (D.index 2 expression)
+ (Decode.tail D.value |> D.map (List.drop 2) |> D.andThen (organizeArgs (D.map float D.float) []))
+
+ "case" ->
+ D.map (calln (Lib.eName "conditionally"))
+ (Decode.tail D.value |> D.andThen (organizeArgs expression []))
+
+ _ ->
+ let
+ fallback =
+ Decode.tail expression
+ |> D.map
+ (\arguments ->
+ case funName of
+ "==" ->
+ Lib.pipelineCall "isEqual" arguments
+
+ "!=" ->
+ Lib.pipelineCall "notEqual" arguments
+
+ "!has" ->
+ Lib.todo "!has is not supported"
+
+ "!in" ->
+ Lib.todo "!in is not supported"
+
+ "in" ->
+ Lib.todo "in is not supported"
+
+ ">=" ->
+ Lib.pipelineCall "greaterThanOrEqual" arguments
+
+ ">" ->
+ Lib.pipelineCall "greaterThan" arguments
+
+ "<=" ->
+ Lib.pipelineCall "lessThanOrEqual" arguments
+
+ "<" ->
+ Lib.pipelineCall "lessThan" arguments
+
+ "concat" ->
+ Lib.pipelineMultiCall "append" arguments
+
+ "linear" ->
+ calln (Lib.eName "Linear") arguments
+
+ "rgb" ->
+ calln (Lib.eName "makeRGBColor") arguments
+
+ "rgba" ->
+ calln (Lib.eName "makeRGBAColor") arguments
+
+ "to-rgba" ->
+ calln (Lib.eName "rgbaChannels") arguments
+
+ "-" ->
+ Lib.pipelineMultiCall "minus" arguments
+
+ "*" ->
+ Lib.pipelineMultiCall "multiply" arguments
+
+ "+" ->
+ Lib.pipelineMultiCall "plus" arguments
+
+ "/" ->
+ Lib.pipelineMultiCall "divideBy" arguments
+
+ "%" ->
+ Lib.pipelineMultiCall "modBy" arguments
+
+ "^" ->
+ Lib.pipelineMultiCall "raiseBy" arguments
+
+ "get" ->
+ if List.length arguments == 1 then
+ calln (Lib.eName "getProperty") arguments
+
+ else
+ calln (Lib.eName "get") arguments
+
+ "all" ->
+ call1 (Lib.eName "all") (MyElm.Syntax.list arguments)
+
+ "any" ->
+ call1 (Lib.eName "any") (MyElm.Syntax.list arguments)
+
+ _ ->
+ calln (Lib.eName (toCamelCaseLower funName)) arguments
+ )
+ in
+ if String.toLower funName /= funName then
+ D.oneOf
+ [ D.map (\strs -> calln (Lib.eName "strings") [ list (List.map string strs) ]) <| D.list D.string
+ , fallback
+ ]
+
+ else
+ fallback
+
+
+decodeBool =
+ D.bool
+ |> D.map
+ (\b ->
+ if b then
+ Lib.true
+
+ else
+ Lib.false
+ )
+
+
+decodeMatch : Bool -> any -> Decoder Expression
+decodeMatch isString _ =
+ Decode.tail D.value
+ |> D.andThen
+ (\args ->
+ case args of
+ [] ->
+ todo
+
+ head :: tail ->
+ D.map2
+ (\cond rest ->
+ Lib.pipelineCall
+ (if isString then
+ "matchesStr"
+
+ else
+ "matchesFloat"
+ )
+ (cond :: rest)
+ )
+ (Decode.subdecode expression head)
+ (organizeArgs
+ (if isString then
+ D.map string D.string
+
+ else
+ D.map float D.float
+ )
+ []
+ (normalizeArgs tail)
+ )
+ )
+
+
+normalizeArgs args =
+ case args of
+ a :: b :: rest ->
+ case D.decodeValue (D.list D.value) a of
+ Err _ ->
+ a :: b :: rest
+
+ Ok xs ->
+ List.concatMap (\x -> [ x, b ]) xs ++ normalizeArgs rest
+
+ _ ->
+ args
+
+
+organizeArgs inpDec accu args =
+ case args of
+ [] ->
+ Decode.combine [ D.map list (List.reverse accu |> Decode.combine) ]
+
+ [ default ] ->
+ Decode.combine [ D.map list (List.reverse accu |> Decode.combine), Decode.subdecode expression default ]
+
+ a :: b :: rest ->
+ let
+ newAccu =
+ D.map2
+ pair
+ (Decode.subdecode inpDec a)
+ (Decode.subdecode expression b)
+ :: accu
+ in
+ organizeArgs inpDec newAccu rest
diff --git a/style-generator/src/Decoder/Generic.elm b/style-generator/src/Decoder/Generic.elm
new file mode 100644
index 0000000..b81167e
--- /dev/null
+++ b/style-generator/src/Decoder/Generic.elm
@@ -0,0 +1,52 @@
+module Decoder.Generic exposing (combine, pair, resultToDecoder, subdecode, tail, withDefault)
+
+import Json.Decode as D exposing (Decoder)
+
+
+withDefault : a -> Decoder a -> Decoder a
+withDefault fallback decoder =
+ D.oneOf
+ [ decoder
+ , D.succeed fallback
+ ]
+
+
+combine : List (Decoder a) -> Decoder (List a)
+combine =
+ List.foldr (D.map2 (::)) (D.succeed [])
+
+
+subdecode : Decoder a -> D.Value -> Decoder a
+subdecode d v =
+ D.decodeValue d v |> resultToDecoder
+
+
+tail : Decoder a -> Decoder (List a)
+tail itemDecoder =
+ D.list D.value
+ |> D.andThen
+ (\l ->
+ case l of
+ [] ->
+ D.fail "Can't get tail of empty"
+
+ head :: t ->
+ List.map (subdecode itemDecoder) t |> combine
+ )
+
+
+pair : Decoder a -> Decoder b -> Decoder ( a, b )
+pair aDecoder bDecoder =
+ D.map2 Tuple.pair
+ (D.index 0 aDecoder)
+ (D.index 1 bDecoder)
+
+
+resultToDecoder : Result D.Error a -> Decoder a
+resultToDecoder res =
+ case res of
+ Ok a ->
+ D.succeed a
+
+ Err e ->
+ D.fail (D.errorToString e)
diff --git a/style-generator/src/Decoder/Helpers.elm b/style-generator/src/Decoder/Helpers.elm
new file mode 100644
index 0000000..74c47b0
--- /dev/null
+++ b/style-generator/src/Decoder/Helpers.elm
@@ -0,0 +1,9 @@
+module Decoder.Helpers exposing (todo)
+
+import Json.Decode as D exposing (Decoder)
+import Json.Encode
+import Lib
+
+
+todo =
+ D.map (\val -> Lib.todo ("The expression " ++ Json.Encode.encode 0 val ++ " is not yet supported")) D.value
diff --git a/style-generator/src/Decoder/Legacy.elm b/style-generator/src/Decoder/Legacy.elm
new file mode 100644
index 0000000..2c7be93
--- /dev/null
+++ b/style-generator/src/Decoder/Legacy.elm
@@ -0,0 +1,110 @@
+module Decoder.Legacy exposing (filter)
+
+import Decoder.Expression exposing (decodeBool)
+import Decoder.Generic as Decode
+import Decoder.Helpers exposing (todo)
+import Json.Decode as D exposing (Decoder)
+import Lib
+import MyElm.Syntax exposing (Expression, calln, float, int, list, pair, string)
+
+
+filter =
+ let
+ decodeProp =
+ D.index 1 D.string
+ |> D.map
+ (\prop ->
+ case prop of
+ "$type" ->
+ Lib.eValue "geometryType"
+
+ "$id" ->
+ Lib.eValue "id"
+
+ _ ->
+ calln (Lib.eName "getProperty") [ Lib.str (string prop) ]
+ )
+
+ decodeVal =
+ D.index 2 <|
+ D.oneOf
+ [ D.map (string >> Lib.str) D.string
+ , D.map (float >> Lib.float) D.float
+ , decodeBool
+ ]
+
+ decodeVals =
+ D.list <|
+ D.oneOf
+ [ D.map (string >> Lib.str) D.string
+ , D.map (float >> Lib.float) D.float
+ , decodeBool
+ ]
+
+ operator name =
+ D.map2 (\prop val -> Lib.pipelineCall name [ prop, val ]) decodeProp decodeVal
+ in
+ D.index 0 D.string
+ |> D.andThen
+ (\filt ->
+ case filt of
+ "all" ->
+ Decode.tail filter |> D.map (\filters -> calln (Lib.eName "all") [ list filters ])
+
+ "any" ->
+ Decode.tail filter |> D.map (\filters -> calln (Lib.eName "any") [ list filters ])
+
+ "none" ->
+ Decode.tail filter |> D.map (\filters -> calln (Lib.eName "all") [ list (List.map (\f -> calln (Lib.eName "not") [ f ]) filters) ])
+
+ "has" ->
+ D.index 1 D.string |> D.map (\prop -> calln (Lib.eName "hasProperty") [ Lib.str (string prop) ])
+
+ "!has" ->
+ D.index 1 D.string |> D.map (\prop -> calln (Lib.eName "not") [ calln (Lib.eName "hasProperty") [ Lib.str (string prop) ] ])
+
+ "==" ->
+ operator "isEqual"
+
+ "!=" ->
+ operator "notEqual"
+
+ ">" ->
+ operator "greaterThan"
+
+ ">=" ->
+ operator "greaterThanOrEqual"
+
+ "<" ->
+ operator "lessThan"
+
+ "<=" ->
+ operator "lessThanOrEqual"
+
+ "in" ->
+ D.map2
+ (\prop values ->
+ List.drop 2 values
+ |> List.map (\v -> Lib.pipelineCall "isEqual" [ prop, v ])
+ |> list
+ |> List.singleton
+ |> calln (Lib.eName "any")
+ )
+ decodeProp
+ decodeVals
+
+ "!in" ->
+ D.map2
+ (\prop values ->
+ List.drop 2 values
+ |> List.map (\v -> Lib.pipelineCall "notEqual" [ prop, v ])
+ |> list
+ |> List.singleton
+ |> calln (Lib.eName "all")
+ )
+ decodeProp
+ decodeVals
+
+ _ ->
+ D.fail "not actually a legacy filter"
+ )
diff --git a/style-generator/src/Lib.elm b/style-generator/src/Lib.elm
new file mode 100644
index 0000000..32692cf
--- /dev/null
+++ b/style-generator/src/Lib.elm
@@ -0,0 +1,101 @@
+module Lib exposing (bare, eName, eValue, expressionNs, false, float, floats, get, int, layerNs, pipelineCall, pipelineMultiCall, sourceNs, str, styleNs, todo, true, zoom)
+
+import MyElm.Advanced as Advanced
+import MyElm.Syntax as Elm exposing (Expression)
+
+
+styleNs =
+ [ "Mapbox", "Style" ]
+
+
+layerNs =
+ [ "Mapbox", "Layer" ]
+
+
+expressionNs =
+ [ "Mapbox", "Expression" ]
+
+
+sourceNs =
+ [ "Mapbox", "Source" ]
+
+
+eName name =
+ Advanced.aliasedName { modulePath = expressionNs, aliasName = "E", name = name, typeName = Nothing }
+
+
+bare =
+ Advanced.exposedName expressionNs
+
+
+zoom : Expression
+zoom =
+ Elm.call0 (eName "zoom")
+
+
+true : Expression
+true =
+ Elm.call0 (bare "true")
+
+
+false : Expression
+false =
+ Elm.call0 (bare "false")
+
+
+float : Expression -> Expression
+float =
+ Elm.call1 (bare "float")
+
+
+floats : Expression -> Expression
+floats =
+ Elm.call1 (eName "floats")
+
+
+int : Expression -> Expression
+int =
+ Elm.call1 (bare "int")
+
+
+str : Expression -> Expression
+str =
+ Elm.call1 (bare "str")
+
+
+eValue : String -> Expression
+eValue =
+ eName >> Elm.call0
+
+
+get : Expression -> Expression
+get =
+ Elm.call1 (eName "get")
+
+
+todo : String -> Expression
+todo msg =
+ Elm.call1 (Elm.valueName [ "Debug" ] "todo") (Elm.string msg)
+
+
+pipelineCall : String -> List Expression -> Expression
+pipelineCall name args =
+ case args of
+ fst :: rest ->
+ Elm.call2 (Elm.local "|>")
+ fst
+ (Elm.calln (eName name) rest)
+
+ _ ->
+ todo <| "Wrong number of arguments passed to E." ++ name
+
+
+pipelineMultiCall : String -> List Expression -> Expression
+pipelineMultiCall name args =
+ case args of
+ fst :: rest ->
+ List.map (Elm.call1 (eName name)) rest
+ |> List.foldl (\a b -> Elm.call2 (Elm.local "|>") b a) fst
+
+ _ ->
+ todo <| "Wrong number of arguments passed to E." ++ name
diff --git a/style-generator/src/Main.elm b/style-generator/src/Main.elm
index e46254e..7a5ba63 100644
--- a/style-generator/src/Main.elm
+++ b/style-generator/src/Main.elm
@@ -1,12 +1,24 @@
-module Main exposing (main)
+port module Main exposing (main)
import Browser
import Decoder
-import Html exposing (div, input, label, p, pre, text)
-import Html.Attributes exposing (style, type_, value)
-import Html.Events exposing (onClick, onInput)
+import Element exposing (Element, centerY, fill, height, padding, px, rgb255, spacing, text, width)
+import Element.Background as Background
+import Element.Border as Border
+import Element.Font as Font
+import Element.Input as Input
+import Html
+import Html.Attributes exposing (property, style)
+import Html.Events
import Http
import Json.Decode
+import Json.Encode exposing (Value)
+
+
+port requestStyleUpgrade : String -> Cmd msg
+
+
+port styleUpgradeComplete : (Value -> msg) -> Sub msg
main =
@@ -19,12 +31,14 @@ main =
init () =
- ( { styleUrl = ""
- , token = ""
+ ( { styleUrl = "https://api.mapbox.com/styles/v1/mapbox/outdoors-v9"
+ , token = "pk.eyJ1IjoiYXN0cm9zYXQiLCJhIjoiY2o3YWtjNnJzMGR6ajM3b2FidmNwaDNsaSJ9.lwWi7kOiejlT0RbD7RxtmA"
, style = Nothing
, error = Nothing
+ , code = Nothing
}
, Cmd.none
+ -- , fetchStyle "https://api.mapbox.com/styles/v1/astrosat/cjl6ljcr80vwg2rmgep7t3dtl" "pk.eyJ1IjoiYXN0cm9zYXQiLCJhIjoiY2o3YWtjNnJzMGR6ajM3b2FidmNwaDNsaSJ9.lwWi7kOiejlT0RbD7RxtmA"
)
@@ -33,12 +47,13 @@ type Msg
| LoadStyle
| StyleURLChanged String
| TokenChanged String
+ | StyleUpgradeCompleted Value
update msg model =
case msg of
LoadedStyle (Ok style) ->
- ( { model | style = Just style }, Cmd.none )
+ ( { model | style = Just style }, requestStyleUpgrade style )
LoadedStyle (Err e) ->
( { model | error = Just (errorToString e) }, Cmd.none )
@@ -52,9 +67,30 @@ update msg model =
TokenChanged s ->
( { model | token = s }, Cmd.none )
+ StyleUpgradeCompleted style ->
+ ( { model
+ | code =
+ case Json.Decode.decodeValue (Json.Decode.field "type" Json.Decode.string) style of
+ Ok "Ok" ->
+ Json.Decode.decodeValue (Json.Decode.field "result" Decoder.styleCode) style
+ |> Result.mapError Json.Decode.errorToString
+ |> Just
+
+ Ok "Err" ->
+ Json.Decode.decodeValue (Json.Decode.at [ "error", "message" ] Json.Decode.string) style
+ |> Result.withDefault "Something went wrong"
+ |> Err
+ |> Just
-subscriptions model =
- Sub.none
+ _ ->
+ Just (Err "Something went wrong")
+ }
+ , Cmd.none
+ )
+
+
+subscriptions l =
+ styleUpgradeComplete StyleUpgradeCompleted
fetchStyle styleUrl token =
@@ -65,20 +101,128 @@ fetchStyle styleUrl token =
|> Http.send LoadedStyle
-form model =
- div []
- [ div []
- [ label [] [ text "Style URL:" ]
- , input [ type_ "text", value model.styleUrl, onInput StyleURLChanged ] []
- ]
- , div []
- [ label [] [ text "Token:" ]
- , input [ type_ "text", value model.token, onInput TokenChanged ] []
+
+-- UI
+
+
+pad =
+ 20
+
+
+body model =
+ Element.layout [ width fill, height fill ] <|
+ Element.column [ width fill, height fill, spacing pad ]
+ [ Element.row [ width fill, height (px 60), Background.color (rgb255 238 238 238), padding pad, Border.color (rgb255 96 181 204), Border.widthEach { bottom = 2, left = 0, right = 0, top = 0 } ]
+ [ Element.el [] <| Element.text "Mapbox to Elm Style Converter"
+ , Element.link [ Font.color (rgb255 18 133 207), Element.alignRight ]
+ { url = "https://github.com/gampleman/elm-mapbox/tree/master/style-generator"
+ , label = text "GitHub"
+ }
+ ]
+ , Element.row [ width fill, height fill ]
+ [ form [ height fill, width fill, spacing pad, padding pad ] model
+ , results [ height fill, width fill ] model
+ ]
]
- , div [] [ input [ type_ "submit", value "Fetch", onClick LoadStyle ] [] ]
+
+
+form attrs model =
+ Element.column attrs
+ [ Element.el [] <| Element.text "Import style from Mapbox"
+ , Input.text []
+ { onChange = StyleURLChanged
+ , placeholder = Nothing
+ , label = Input.labelLeft [ centerY, width (px 100) ] <| Element.text "Style URL"
+ , text = model.styleUrl
+ }
+ , Input.text []
+ { onChange = TokenChanged
+ , placeholder = Nothing
+ , label = Input.labelLeft [ centerY, width (px 100) ] <| Element.text "Token"
+ , text = model.token
+ }
+ , Input.button [ Background.color (rgb255 238 238 238), padding pad ] { onPress = Just LoadStyle, label = Element.text "Fetch style" }
+ , Element.el [] <| Element.text "Or paste your style here:"
+ , codeEditor
+ { width = "100%"
+ , height = "100%"
+ , mode = "json"
+ , code = model.style |> Maybe.withDefault ""
+ , onChange = Just (Ok >> LoadedStyle)
+ }
]
+codeEditor : { width : String, height : String, mode : String, code : String, onChange : Maybe (String -> msg) } -> Element msg
+codeEditor props =
+ let
+ handler =
+ case props.onChange of
+ Just tagger ->
+ Html.Events.on "editorChanged" <|
+ Json.Decode.map tagger <|
+ Json.Decode.at [ "detail" ]
+ Json.Decode.string
+
+ Nothing ->
+ property "readonly" (Json.Encode.bool True)
+ in
+ Element.html <|
+ Html.node "code-editor"
+ [ props.code
+ |> Json.Encode.string
+ |> property "editorValue"
+ , handler
+ , property "mode" (Json.Encode.string "elm")
+ , style "width" "50vw"
+ , style "height" "100%"
+ ]
+ []
+
+
+results attrs model =
+ Element.el attrs <|
+ case ( model.error, model.code ) of
+ ( Just err, _ ) ->
+ Element.paragraph [ Font.color (rgb255 207 7 19), padding pad ] [ Element.text err ]
+
+ ( Nothing, Just (Err err) ) ->
+ Element.paragraph [ Font.color (rgb255 207 7 19), padding pad ] [ Element.text err ]
+
+ ( Nothing, Just (Ok srcCode) ) ->
+ codeEditor
+ { width = "50vw"
+ , height = "100%"
+ , mode = "elm"
+ , code = srcCode
+ , onChange = Nothing
+ }
+
+ ( Nothing, Nothing ) ->
+ Element.column [ padding pad, spacing pad ]
+ [ Element.paragraph [] [ Element.text "This is a tool that helps you generate elm-mapbox styles from Mapbox Studio." ]
+ , Element.paragraph [] [ Element.text "In Studio, hit the share button. This will give you the style url and token. This tool will attempt to generate an elm-mapbox style for you. It is not perfect, but should give a nice head-start. Try to compile the file and see if you get any errors." ]
+ , Element.paragraph []
+ [ text "There are a few common limitations that are relatively easy to fix with some grepping. For example, "
+ , code "Layer.lineJoin E.lineCapRound"
+ , text " should be replaced by "
+ , code "Layer.lineJoin E.lineJoinRound"
+ , text ". Also "
+ , code "Layer.textField"
+ , text " is often followed by "
+ , code "E.toString"
+ , text ", but should instead be followed by "
+ , code "E.toFormattedText"
+ , text "."
+ ]
+ ]
+
+
+code : String -> Element msg
+code =
+ Element.el [ Font.family [ Font.monospace ] ] << Element.text
+
+
errorToString : Http.Error -> String
errorToString err =
case err of
@@ -106,33 +250,8 @@ errorToString err =
m
-resultToString r =
- case r of
- Ok s ->
- s
-
- Err s ->
- s
-
-
view model =
{ title = "Style Generator"
, body =
- [ form model
- , case ( model.error, model.style ) of
- ( Just err, _ ) ->
- p [ style "color" "red" ] [ text err ]
-
- ( Nothing, Just styl ) ->
- pre
- []
- [ Json.Decode.decodeString Decoder.styleCode styl
- |> Result.mapError Json.Decode.errorToString
- |> resultToString
- |> text
- ]
-
- ( Nothing, Nothing ) ->
- p [] [ text "This is a tool that helps you generate elm-mapbox styles from Mapbox Studio. In Studio, hit the share button. This will give you the above two pieces of information. Then hit fetch. This tool will attempt to generate an elm-mapbox style for you. It is not perfect, but should give a nice head-start. Run the output through elm-format, than fix any compiler warnings. Then fix any Debug.todo calls." ]
- ]
+ [ body model ]
}
diff --git a/style-generator/src/MyElm/Advanced.elm b/style-generator/src/MyElm/Advanced.elm
new file mode 100644
index 0000000..7f88ab2
--- /dev/null
+++ b/style-generator/src/MyElm/Advanced.elm
@@ -0,0 +1,46 @@
+module MyElm.Advanced exposing (aliasedName, exposedName, cheat)
+
+{-| This module allows you to mess with some of the the little things at the cost of a more verbose API.
+
+@docs aliasedName, exposedName, cheat
+
+-}
+
+import MyElm.Types exposing (Expression(..), Ident(..), QualifiedName(..))
+
+
+{-| Specify a name using a module Alias. If it is a constructor, you must specify the type name as well.
+-}
+aliasedName :
+ { modulePath : List String
+ , aliasName : String
+ , name : String
+ , typeName : Maybe String
+ }
+ -> QualifiedName
+aliasedName opts =
+ case opts.typeName of
+ Just tpn ->
+ Aliased opts.modulePath opts.aliasName (Constructor tpn opts.name)
+
+ Nothing ->
+ Aliased opts.modulePath opts.aliasName (ValueOrType opts.name)
+
+
+{-| Import a name and expose it.
+-}
+exposedName : List String -> String -> QualifiedName
+exposedName modulePath name =
+ Bare modulePath (ValueOrType name)
+
+
+{-| Sometimes it is easier to just include a string of Elm code rather than build it up.
+
+This function will allow you to do that. However, using this breaks the guarantee that the
+generated Elm code will be valid. You should be careful to take into consideration things like
+brackets in the context where you will use this expression.
+
+-}
+cheat : String -> Expression
+cheat =
+ Literal
diff --git a/style-generator/src/MyElm/Stringify.elm b/style-generator/src/MyElm/Stringify.elm
new file mode 100644
index 0000000..da2793c
--- /dev/null
+++ b/style-generator/src/MyElm/Stringify.elm
@@ -0,0 +1,282 @@
+module MyElm.Stringify exposing (arg2string, declaration2string, expose2string, expression2string, module2string, needsBrackets, qualifiedName2string, type2str, type2string)
+
+import MyElm.Types exposing (..)
+
+
+
+-- indentation
+
+
+indented : String -> String
+indented s =
+ s
+ |> String.split "\n"
+ |> String.join "\n "
+ |> String.append " "
+
+
+listLike : String -> String -> String -> List String -> String
+listLike before sep after l =
+ let
+ shouldBeMultiline =
+ List.any (\ln -> List.length (String.split "\n" ln) > 1) l || List.foldl (\ln s -> s + String.length ln) 0 l > 100
+ in
+ if shouldBeMultiline then
+ "\n" ++ indented (before ++ " " ++ String.join ("\n" ++ sep) l ++ "\n" ++ after)
+
+ else if after == "" && before == "" then
+ String.join sep l
+
+ else
+ before ++ " " ++ String.join sep l ++ " " ++ after
+
+
+bodyIndent : String -> String
+bodyIndent str =
+ if List.length (String.split "\n" str) > 1 then
+ str
+
+ else
+ "\n " ++ str
+
+
+expose2string : Exposing -> String
+expose2string expose =
+ case expose of
+ ValueExposed val ->
+ val
+
+ TypeExposed tp ->
+ tp
+
+ TypeAndConstructors tp ->
+ tp ++ "(..)"
+
+
+module2string : Module -> String
+module2string (Module { name, exposes, doc, imports, declarations }) =
+ let
+ header =
+ "module " ++ name ++ " exposing (" ++ String.join ", " (List.map expose2string exposes) ++ ")\n\n"
+
+ docstr =
+ case doc of
+ Just d ->
+ "{-|" ++ d ++ "-}\n\n"
+
+ Nothing ->
+ ""
+
+ imps =
+ String.join "\n" imports
+ ++ (if List.length imports > 0 then
+ "\n\n\n"
+
+ else
+ ""
+ )
+
+ decs =
+ String.join "" <| List.map declaration2string declarations
+ in
+ header ++ docstr ++ imps ++ decs
+
+
+type2str : Bool -> Type -> String
+type2str needsBr tp =
+ case tp of
+ NamedType qualifiedName typeList ->
+ if List.length typeList > 0 then
+ if needsBr then
+ "(" ++ qualifiedName2string qualifiedName ++ " " ++ String.join " " (List.map (type2str True) typeList) ++ ")"
+
+ else
+ qualifiedName2string qualifiedName ++ " " ++ String.join " " (List.map (type2str True) typeList)
+
+ else
+ qualifiedName2string qualifiedName
+
+ RecordType branches ->
+ "{ " ++ String.join ", " (List.map (\( name, typ ) -> name ++ " = " ++ type2str False typ) branches) ++ " }"
+
+ FunctionType typeList ->
+ let
+ a =
+ String.join " -> " (List.map (type2str False) typeList)
+ in
+ if needsBr then
+ "(" ++ a ++ ")"
+
+ else
+ a
+
+ TupleType typeList ->
+ "( " ++ String.join ", " (List.map (type2str False) typeList) ++ " )"
+
+ TypeVariable name ->
+ name
+
+
+type2string =
+ type2str False
+
+
+declaration2string : Declaration -> String
+declaration2string declaration =
+ case declaration of
+ CustomType name variables variants ->
+ "type " ++ String.join " " (name :: variables) ++ "\n = " ++ String.join "\n | " (List.map (\( nm, args ) -> String.join " " (nm :: List.map (type2str True) args)) variants) ++ "\n\n\n"
+
+ TypeAlias name variables aliased ->
+ "type alias " ++ String.join " " (name :: variables) ++ "\n =" ++ type2string aliased ++ "\n\n\n"
+
+ Comment str ->
+ "{-|" ++ str ++ "}"
+
+ ValueDeclaration name anno argList expression ->
+ let
+ decl =
+ name ++ " " ++ String.join " " (List.map arg2string argList) ++ " =" ++ bodyIndent (expression2string expression) ++ "\n\n\n"
+ in
+ case anno of
+ [] ->
+ decl
+
+ signature ->
+ name ++ " : " ++ String.join " -> " (List.map type2string signature) ++ "\n" ++ decl
+
+
+arg2string : Argument -> String
+arg2string argument =
+ case argument of
+ Argument a ->
+ a
+
+
+qualifiedName2string : QualifiedName -> String
+qualifiedName2string qualifiedName =
+ let
+ identifierToStr id =
+ case id of
+ Constructor _ s ->
+ s
+
+ ValueOrType s ->
+ s
+ in
+ case qualifiedName of
+ Local ident ->
+ identifierToStr ident
+
+ FullyQualified modPath ident ->
+ String.join "." modPath ++ "." ++ identifierToStr ident
+
+ Aliased _ alias_ ident ->
+ alias_ ++ "." ++ identifierToStr ident
+
+ Bare _ ident ->
+ identifierToStr ident
+
+
+bracketify : Expression -> String
+bracketify arg =
+ if needsBrackets arg then
+ "(" ++ expression2string arg ++ ")"
+
+ else
+ expression2string arg
+
+
+isOperator : String -> Bool
+isOperator op =
+ case op of
+ "++" ->
+ True
+
+ "-" ->
+ True
+
+ "+" ->
+ True
+
+ "*" ->
+ True
+
+ "/" ->
+ True
+
+ "//" ->
+ True
+
+ "^" ->
+ True
+
+ "|>" ->
+ True
+
+ "<|" ->
+ True
+
+ _ ->
+ False
+
+
+expression2string : Expression -> String
+expression2string expression =
+ case expression of
+ Call name args ->
+ let
+ nameStr =
+ qualifiedName2string name
+ in
+ if isOperator nameStr then
+ case args of
+ a :: b :: rest ->
+ case nameStr of
+ "|>" ->
+ listLike "" " |> " "" [ expression2string a, String.join " " (List.map expression2string (b :: rest)) ]
+
+ _ ->
+ expression2string a ++ " " ++ nameStr ++ " " ++ String.join " " (List.map expression2string (b :: rest))
+
+ _ ->
+ "(" ++ nameStr ++ ") " ++ String.join " " (List.map bracketify args)
+
+ else
+ String.join " "
+ (nameStr
+ :: List.map
+ (\arg ->
+ if needsBrackets arg then
+ "(" ++ expression2string arg ++ ")"
+
+ else
+ expression2string arg
+ )
+ args
+ )
+
+ Literal lit ->
+ lit
+
+ ListExpr expressions ->
+ listLike "[" ", " "]" (List.map expression2string expressions)
+
+ Tuple expressions ->
+ listLike "(" ", " ")" (List.map expression2string expressions)
+
+ Record branches ->
+ listLike "{" ", " "}" (List.map (\( name, branch ) -> name ++ " = " ++ expression2string branch) branches)
+
+
+needsBrackets : Expression -> Bool
+needsBrackets expression =
+ case expression of
+ Call _ [] ->
+ False
+
+ Call _ _ ->
+ True
+
+ _ ->
+ False
diff --git a/style-generator/src/MyElm/Syntax.elm b/style-generator/src/MyElm/Syntax.elm
new file mode 100644
index 0000000..7b99915
--- /dev/null
+++ b/style-generator/src/MyElm/Syntax.elm
@@ -0,0 +1,678 @@
+module MyElm.Syntax exposing
+ ( QualifiedName, local, valueName, typeName, constructorName
+ , Expression, string, float, int, list, pair, triple, call0, call1, call2, call3, call4, calln, pipe, record
+ , Type, type0, type1, type2, typen, recordType, functionType, pairType, tripleType, typeVar
+ , Declaration, variable, fun1, customType, typeAlias
+ , build, Exposing, opaque, withConstructors, exposeFn
+ )
+
+{-| This module is intended for autogenerating elm code with
+relatively minimal fuss and without needing to do bookkeeping
+about minor details like indentation, etc.
+
+This is meant as the simple, convenient module that you
+should get started with. It attempts to reduce boilerplate
+to a minimum, but makes some opinionated choice about what
+the results should look like. You can also use the Advanced
+module if you want to make different choices.
+
+The simplifcations made here are:
+
+ - Helpers for naming things assume a particular import style.
+ - Imports are generated for you automatically.
+ - Custom types and type alaises generate their type variables implicitely.
+
+
+### Naming things
+
+@docs QualifiedName, local, valueName, typeName, constructorName
+
+
+### Expressions
+
+@docs Expression, string, float, int, list, pair, triple, call0, call1, call2, call3, call4, calln, pipe, record
+
+
+### Type signatures
+
+@docs Type, type0, type1, type2, typen, recordType, functionType, pairType, tripleType, typeVar
+
+
+### Declarations
+
+@docs Declaration, variable, fun1, customType, typeAlias
+
+
+### Modules
+
+@docs build, Exposing, opaque, withConstructors, exposeFn
+
+-}
+
+import MyElm.Stringify
+import MyElm.Types exposing (..)
+import Set
+
+
+{-| The simplest thing you will need to do is keep track of what things in the program are called and where they come from.
+-}
+type alias QualifiedName =
+ MyElm.Types.QualifiedName
+
+
+{-| This is a value (i.e. variable or function, but not type or constructor) from a module whose path is the first argument.
+-}
+valueName : List String -> String -> QualifiedName
+valueName modulePath name =
+ FullyQualified modulePath (ValueOrType name)
+
+
+{-| This is a type from a module whose path is the first argument.
+-}
+typeName : List String -> String -> QualifiedName
+typeName modulePath name =
+ Bare modulePath (ValueOrType name)
+
+
+{-| This is a constructor for a type (the second argument) from a module whose path is the first argument.
+
+ just =
+ constructorName [ "Result" ] "Result" "Just"
+
+-}
+constructorName : List String -> String -> String -> QualifiedName
+constructorName modulePath typeNm name =
+ Bare modulePath (Constructor typeNm name)
+
+
+{-| This is a variable local to the module you are generating.
+-}
+local : String -> QualifiedName
+local name =
+ Local (ValueOrType name)
+
+
+isLocal : QualifiedName -> Bool
+isLocal qualifiedName =
+ case qualifiedName of
+ Local _ ->
+ True
+
+ _ ->
+ False
+
+
+{-| Create a module and return it as a pretty printed string.
+-}
+build :
+ { name : List String
+ , exposes : List Exposing
+ , doc : Maybe String
+ , declarations : List Declaration
+ }
+ -> String
+build m =
+ Module
+ { name = String.join "." m.name
+ , exposes = m.exposes
+ , doc = m.doc
+ , imports = consolidateImports (extractImports m.declarations)
+ , declarations = m.declarations
+ }
+ |> MyElm.Stringify.module2string
+
+
+{-| What you would like to expose from a module.
+-}
+type alias Exposing =
+ MyElm.Types.Exposing
+
+
+{-| Expose a custom type, but leave the constructors hidden.
+-}
+opaque : String -> Exposing
+opaque =
+ TypeExposed
+
+
+{-| Expose a custom type and all its constructors.
+-}
+withConstructors : String -> Exposing
+withConstructors =
+ TypeAndConstructors
+
+
+{-| Expose a function or value.
+-}
+exposeFn : String -> Exposing
+exposeFn =
+ ValueExposed
+
+
+{-| -}
+type alias Declaration =
+ MyElm.Types.Declaration
+
+
+{-| This will do automatic type variable extraction for you in order of appearance in the type declaration.
+
+So for example:
+
+ customType "Foo"
+ [ ( "Bar", TypeVariable "g" )
+ , ( "Baz", TypeVariable "comparable" )
+ ]
+
+would generate the following code:
+
+ type Foo g comparable
+ = Bar g
+ | Baz comparable
+
+If you would like to control the order in which type variables appear, you can use the function in the "Advanced" module.
+
+-}
+customType : String -> List ( String, List Type ) -> Declaration
+customType name variants =
+ CustomType name (List.concatMap (Tuple.second >> List.concatMap extractVariables) variants |> unique) variants
+
+
+{-| Declare a type alias. Also does automatic type variable extraction.
+-}
+typeAlias : String -> Type -> Declaration
+typeAlias name type_ =
+ TypeAlias name (extractVariables type_ |> unique) type_
+
+
+unique : List comparable -> List comparable
+unique =
+ Set.fromList >> Set.toList
+
+
+extractVariables : Type -> List String
+extractVariables tp =
+ case tp of
+ NamedType _ typeList ->
+ List.concatMap extractVariables typeList
+
+ RecordType branches ->
+ List.concatMap (Tuple.second >> extractVariables) branches
+
+ FunctionType typeList ->
+ List.concatMap extractVariables typeList
+
+ TupleType typeList ->
+ List.concatMap extractVariables typeList
+
+ TypeVariable variable_ ->
+ [ variable_ ]
+
+
+{-| Declare a top level variable.
+-}
+variable : String -> Type -> Expression -> Declaration
+variable name typeAnno expression =
+ ValueDeclaration name [ typeAnno ] [] expression
+
+
+{-| Declare a top level function with a single argument.
+
+ fun1 "identity" (typeVar "a") (typeVar "a") "a" call0
+
+would be turned into:
+
+ identity : a -> a
+ identity a =
+ a
+
+-}
+fun1 : String -> Type -> Type -> String -> (QualifiedName -> Expression) -> Declaration
+fun1 name fromTp toTp arg f =
+ ValueDeclaration name [ fromTp, toTp ] [ Argument arg ] (f (local arg))
+
+
+{-| The heart of an elm program are the expressions that implement the computations.
+-}
+type alias Expression =
+ MyElm.Types.Expression
+
+
+{-| Reference a variable by name.
+-}
+call0 : QualifiedName -> Expression
+call0 name =
+ Call name []
+
+
+{-| Call a function with 1 argument.
+-}
+call1 : QualifiedName -> Expression -> Expression
+call1 name arg =
+ Call name [ arg ]
+
+
+{-| Call a function with 2 arguments.
+-}
+call2 : QualifiedName -> Expression -> Expression -> Expression
+call2 name arg1 arg2 =
+ Call name [ arg1, arg2 ]
+
+
+{-| Call a function with 3 arguments.
+-}
+call3 : QualifiedName -> Expression -> Expression -> Expression -> Expression
+call3 name arg1 arg2 arg3 =
+ Call name [ arg1, arg2, arg3 ]
+
+
+{-| Call a function with 4 arguments.
+-}
+call4 : QualifiedName -> Expression -> Expression -> Expression -> Expression -> Expression
+call4 name arg1 arg2 arg3 arg4 =
+ Call name [ arg1, arg2, arg3, arg4 ]
+
+
+{-| Call a function with any number of arguments.
+-}
+calln : QualifiedName -> List Expression -> Expression
+calln name args =
+ Call name args
+
+
+{-| A convenience helper for construcing pipelines.
+
+ string "foo"
+ |> pipe (valueName [ "String" ] "concat") [ string "bar" ]
+
+would generate:
+
+ "foo"
+ |> String.concat "bar"
+
+This is just a helper for:
+
+ pipe name args subject =
+ call2 (valueName [ "Basics" ] "|>") subject (calln name args)
+
+-}
+pipe : QualifiedName -> List Expression -> Expression -> Expression
+pipe name args subject =
+ Call (valueName [ "Basics" ] "|>") [ subject, Call name args ]
+
+
+{-| A string literal.
+-}
+string : String -> Expression
+string s =
+ Literal ("\"" ++ String.replace "\"" "\\\"" s ++ "\"")
+
+
+{-| A float literal.
+-}
+float : Float -> Expression
+float f =
+ Literal (String.fromFloat f)
+
+
+{-| An integer literal.
+-}
+int : Int -> Expression
+int i =
+ Literal (String.fromInt i)
+
+
+{-| A list literal
+-}
+list : List Expression -> Expression
+list =
+ ListExpr
+
+
+{-| A two-tuple literal
+-}
+pair : Expression -> Expression -> Expression
+pair a b =
+ Tuple [ a, b ]
+
+
+{-| A three-tuple literal
+-}
+triple : Expression -> Expression -> Expression -> Expression
+triple a b c =
+ Tuple [ a, b, c ]
+
+
+{-| A record literal expression.
+-}
+record : List ( String, Expression ) -> Expression
+record =
+ Record
+
+
+{-| A representation of a type as in a type annotation context.
+-}
+type alias Type =
+ MyElm.Types.Type
+
+
+{-| A simple type, like `Int`.
+-}
+type0 : QualifiedName -> Type
+type0 qualifiedName =
+ NamedType qualifiedName []
+
+
+{-| A type with one argument, like `List`.
+-}
+type1 : QualifiedName -> Type -> Type
+type1 qualifiedName arg1 =
+ NamedType qualifiedName [ arg1 ]
+
+
+{-| A type with 2 arguments.
+-}
+type2 : QualifiedName -> Type -> Type -> Type
+type2 qualifiedName arg1 arg2 =
+ NamedType qualifiedName [ arg1, arg2 ]
+
+
+{-| A type with many arguments.
+-}
+typen : QualifiedName -> List Type -> Type
+typen qualifiedName args =
+ NamedType qualifiedName args
+
+
+{-| A record type.
+
+For example we could model
+
+ { foo = Int
+ , bar = List String
+ }
+
+so:
+
+ recordType
+ [ ( "foo", type0 (typeName [ "Basics" ] "Int") )
+ , ( "bar"
+ , type1 (typeName [ "Basics" ] "List")
+ (type0
+ (typeName [ "String" ] "String")
+ )
+ )
+ ]
+
+-}
+recordType : List ( String, Type ) -> Type
+recordType =
+ RecordType
+
+
+{-| A function type.
+-}
+functionType : List Type -> Type
+functionType =
+ FunctionType
+
+
+{-| Pair type.
+-}
+pairType : Type -> Type -> Type
+pairType a b =
+ TupleType [ a, b ]
+
+
+{-| -}
+tripleType : Type -> Type -> Type -> Type
+tripleType a b c =
+ TupleType [ a, b, c ]
+
+
+{-| A type variable.
+-}
+typeVar : String -> Type
+typeVar =
+ TypeVariable
+
+
+extractImports : List Declaration -> List QualifiedName
+extractImports =
+ List.concatMap
+ (\dec ->
+ case dec of
+ CustomType _ _ variants ->
+ List.concatMap (\( _, args ) -> List.concatMap typeImports args) variants
+
+ TypeAlias _ _ aliased ->
+ typeImports aliased
+
+ Comment _ ->
+ []
+
+ ValueDeclaration _ signature _ expression ->
+ List.concatMap typeImports signature ++ expressionImports expression
+ )
+
+
+typeImports : Type -> List QualifiedName
+typeImports tp =
+ case tp of
+ NamedType qualifiedName args ->
+ qualifiedName :: List.concatMap typeImports args
+
+ RecordType rec ->
+ List.concatMap (\( _, typ ) -> typeImports typ) rec
+
+ FunctionType typeList ->
+ List.concatMap typeImports typeList
+
+ TupleType typeList ->
+ List.concatMap typeImports typeList
+
+ TypeVariable _ ->
+ []
+
+
+expressionImports : Expression -> List QualifiedName
+expressionImports expression =
+ case expression of
+ Call qualifiedName expressionList ->
+ qualifiedName :: List.concatMap expressionImports expressionList
+
+ Literal _ ->
+ []
+
+ ListExpr expressionList ->
+ List.concatMap expressionImports expressionList
+
+ Tuple expressionList ->
+ List.concatMap expressionImports expressionList
+
+ Record branches ->
+ List.concatMap (Tuple.second >> expressionImports) branches
+
+
+consolidateImports : List QualifiedName -> List String
+consolidateImports qualifiedNames =
+ qualifiedNames
+ |> List.filter removeDefaults
+ |> List.map toTupleRep
+ |> Set.fromList
+ |> Set.toList
+ |> List.sort
+ |> consolidateTuples
+ |> List.map
+ (\( mod, al, imps ) ->
+ let
+ name =
+ "import " ++ mod
+
+ alias_ =
+ if al == "" then
+ ""
+
+ else
+ " as " ++ al
+
+ exposingList =
+ if List.length imps > 0 then
+ " exposing (" ++ String.join ", " imps ++ ")"
+
+ else
+ ""
+ in
+ String.join "" [ name, alias_, exposingList ]
+ )
+
+
+consolidateTuples : List ( String, String, List String ) -> List ( String, String, List String )
+consolidateTuples tuples =
+ case tuples of
+ ( xm, xa, xl ) :: ( ym, ya, yl ) :: rest ->
+ if xm == ym && (xa == ya || xa == "" || ya == "") then
+ consolidateTuples
+ (( xm
+ , if xa == "" then
+ ya
+
+ else
+ xa
+ , xl ++ yl
+ )
+ :: rest
+ )
+
+ else
+ ( xm, xa, xl ) :: consolidateTuples (( ym, ya, yl ) :: rest)
+
+ x ->
+ x
+
+
+iden2str : Ident -> List String
+iden2str ident =
+ case ident of
+ Constructor tpname _ ->
+ [ tpname ++ "(..)" ]
+
+ ValueOrType name ->
+ [ name ]
+
+
+toTupleRep : QualifiedName -> ( String, String, List String )
+toTupleRep qualifiedName =
+ case qualifiedName of
+ Local _ ->
+ ( "not-possible", "", [] )
+
+ FullyQualified module_ id ->
+ ( String.join "." module_, "", [] )
+
+ Aliased module_ alias_ id ->
+ ( String.join "." module_, alias_, [] )
+
+ Bare module_ id ->
+ ( String.join "." module_, "", iden2str id )
+
+
+removeDefaults : QualifiedName -> Bool
+removeDefaults qualifedName =
+ case qualifedName of
+ Local _ ->
+ False
+
+ FullyQualified module_ id ->
+ case module_ of
+ [ "Basics" ] ->
+ False
+
+ [ "List" ] ->
+ False
+
+ [ "Maybe" ] ->
+ False
+
+ [ "Result" ] ->
+ False
+
+ [ "String" ] ->
+ False
+
+ [ "Char" ] ->
+ False
+
+ [ "Tuple" ] ->
+ False
+
+ [ "Debug" ] ->
+ False
+
+ [ "Platform" ] ->
+ False
+
+ _ ->
+ True
+
+ Aliased module_ alias_ id ->
+ case ( module_, alias_ ) of
+ ( [ "Platform", "Cmd" ], "Cmd" ) ->
+ False
+
+ ( [ "Platform", "Sub" ], "Sub" ) ->
+ False
+
+ _ ->
+ True
+
+ Bare module_ (Constructor tpname name) ->
+ case ( module_, tpname ) of
+ ( [ "Basics" ], _ ) ->
+ False
+
+ ( [ "List" ], "List" ) ->
+ False
+
+ ( [ "Maybe" ], "Maybe" ) ->
+ False
+
+ ( [ "Result" ], "Result" ) ->
+ False
+
+ _ ->
+ True
+
+ Bare module_ (ValueOrType tpname) ->
+ case ( module_, tpname ) of
+ ( [ "Basics" ], _ ) ->
+ False
+
+ ( [ "List" ], "List" ) ->
+ False
+
+ ( [ "List" ], "::" ) ->
+ False
+
+ ( [ "Maybe" ], "Maybe" ) ->
+ False
+
+ ( [ "Result" ], "Result" ) ->
+ False
+
+ ( [ "String" ], "String" ) ->
+ False
+
+ ( [ "Char" ], "Char" ) ->
+ False
+
+ ( [ "Platform" ], "Program" ) ->
+ False
+
+ ( [ "Platform", "Cmd" ], "Cmd" ) ->
+ False
+
+ ( [ "Platform", "Sub" ], "Sub" ) ->
+ False
+
+ _ ->
+ True
diff --git a/style-generator/src/MyElm/Types.elm b/style-generator/src/MyElm/Types.elm
new file mode 100644
index 0000000..ef473e4
--- /dev/null
+++ b/style-generator/src/MyElm/Types.elm
@@ -0,0 +1,56 @@
+module MyElm.Types exposing (Argument(..), Declaration(..), Exposing(..), Expression(..), Ident(..), Module(..), QualifiedName(..), Type(..))
+
+
+type Module
+ = Module
+ { name : String
+ , exposes : List Exposing
+ , doc : Maybe String
+ , imports : List String
+ , declarations : List Declaration
+ }
+
+
+type QualifiedName
+ = Local Ident
+ | FullyQualified (List String) Ident
+ | Aliased (List String) String Ident
+ | Bare (List String) Ident
+
+
+type Ident
+ = Constructor String String
+ | ValueOrType String
+
+
+type Exposing
+ = ValueExposed String
+ | TypeExposed String
+ | TypeAndConstructors String
+
+
+type Type
+ = NamedType QualifiedName (List Type)
+ | RecordType (List ( String, Type ))
+ | FunctionType (List Type)
+ | TupleType (List Type)
+ | TypeVariable String
+
+
+type Declaration
+ = CustomType String (List String) (List ( String, List Type ))
+ | TypeAlias String (List String) Type
+ | ValueDeclaration String (List Type) (List Argument) Expression
+ | Comment String
+
+
+type Expression
+ = Call QualifiedName (List Expression)
+ | Literal String
+ | ListExpr (List Expression)
+ | Tuple (List Expression)
+ | Record (List ( String, Expression ))
+
+
+type Argument
+ = Argument String
diff --git a/style-generator/src/Writer.elm b/style-generator/src/Writer.elm
deleted file mode 100644
index ad9f3fd..0000000
--- a/style-generator/src/Writer.elm
+++ /dev/null
@@ -1,640 +0,0 @@
-module Writer exposing (write, writeDeclaration, writeExpression, writeFile, writePattern, writeTypeAnnotation)
-
-{-| Copied and tweaked from Elm Syntax.
-
-
-# Elm.Writer
-
-Write a file to a string.
-@docs write, writeFile, writePattern, writeExpression, writeTypeAnnotation, writeDeclaration
-
--}
-
-import Elm.Syntax.Declaration exposing (..)
-import Elm.Syntax.Documentation exposing (..)
-import Elm.Syntax.Exposing as Exposing exposing (..)
-import Elm.Syntax.Expression exposing (..)
-import Elm.Syntax.File exposing (..)
-import Elm.Syntax.Import exposing (Import)
-import Elm.Syntax.Infix exposing (..)
-import Elm.Syntax.Module exposing (..)
-import Elm.Syntax.ModuleName exposing (..)
-import Elm.Syntax.Node as Node exposing (Node(..))
-import Elm.Syntax.Pattern exposing (..)
-import Elm.Syntax.Range exposing (Range)
-import Elm.Syntax.Signature exposing (Signature)
-import Elm.Syntax.Type exposing (..)
-import Elm.Syntax.TypeAlias exposing (..)
-import Elm.Syntax.TypeAnnotation exposing (..)
-import List.Extra as List
-import StructuredWriter as Writer exposing (..)
-
-
-{-| Transform a writer to a string
--}
-write : Writer -> String
-write =
- Writer.write
-
-
-{-| Write a file
--}
-writeFile : File -> Writer
-writeFile file =
- breaked
- [ writeModule <| Node.value file.moduleDefinition
- , breaked (List.map (Node.value >> writeImport) file.imports)
- , breaked (List.map writeDeclaration file.declarations)
- ]
-
-
-writeModule : Module -> Writer
-writeModule m =
- case m of
- NormalModule defaultModuleData ->
- writeDefaultModuleData defaultModuleData
-
- PortModule defaultModuleData ->
- spaced
- [ string "port"
- , writeDefaultModuleData defaultModuleData
- ]
-
- EffectModule effectModuleData ->
- writeEffectModuleData effectModuleData
-
-
-writeDefaultModuleData : DefaultModuleData -> Writer
-writeDefaultModuleData { moduleName, exposingList } =
- spaced
- [ string "module"
- , writeModuleName <| Node.value moduleName
- , writeExposureExpose <| Node.value exposingList
- ]
-
-
-writeEffectModuleData : EffectModuleData -> Writer
-writeEffectModuleData { moduleName, exposingList, command, subscription } =
- spaced
- [ string "effect"
- , string "module"
- , writeModuleName <| Node.value moduleName
- , writeWhere ( command, subscription )
- , writeExposureExpose <| Node.value exposingList
- ]
-
-
-writeWhere : ( Maybe (Node String), Maybe (Node String) ) -> Writer
-writeWhere input =
- case input of
- ( Nothing, Nothing ) ->
- epsilon
-
- ( Just x, Nothing ) ->
- spaced
- [ string "where { command ="
- , string <| Node.value x
- , string "}"
- ]
-
- ( Nothing, Just x ) ->
- spaced
- [ string "where { subscription ="
- , string <| Node.value x
- , string "}"
- ]
-
- ( Just x, Just y ) ->
- spaced
- [ string "where { command ="
- , string <| Node.value x
- , string ", subscription ="
- , string <| Node.value y
- , string "}"
- ]
-
-
-writeModuleName : ModuleName -> Writer
-writeModuleName moduleName =
- string (String.join "." moduleName)
-
-
-writeExposureExpose : Exposing -> Writer
-writeExposureExpose x =
- case x of
- All _ ->
- string "exposing (..)"
-
- Explicit exposeList ->
- let
- diffLines =
- List.map Node.range exposeList
- |> startOnDifferentLines
- in
- spaced
- [ string "exposing"
- , parensComma diffLines (List.map writeExpose exposeList)
- ]
-
-
-writeExpose : Node TopLevelExpose -> Writer
-writeExpose (Node _ exp) =
- case exp of
- InfixExpose x ->
- string ("(" ++ x ++ ")")
-
- FunctionExpose f ->
- string f
-
- TypeOrAliasExpose t ->
- string t
-
- TypeExpose { name, open } ->
- case open of
- Just _ ->
- spaced
- [ string name
- , string "(..)"
- ]
-
- Nothing ->
- string name
-
-
-startOnDifferentLines : List Range -> Bool
-startOnDifferentLines xs =
- List.length (List.unique (List.map (.start >> .row) xs)) > 1
-
-
-writeImport : Import -> Writer
-writeImport { moduleName, moduleAlias, exposingList } =
- spaced
- [ string "import"
- , writeModuleName <| Node.value moduleName
- , maybe (Maybe.map (Node.value >> writeModuleName >> (\x -> spaced [ string "as", x ])) moduleAlias)
- , maybe (Maybe.map writeExposureExpose exposingList)
- ]
-
-
-writeLetDeclaration : Node LetDeclaration -> Writer
-writeLetDeclaration (Node _ letDeclaration) =
- case letDeclaration of
- LetFunction function ->
- writeFunction function
-
- LetDestructuring pattern expression ->
- writeDestructuring pattern expression
-
-
-{-| Write a declaration
--}
-writeDeclaration : Node Declaration -> Writer
-writeDeclaration (Node _ decl) =
- case decl of
- FunctionDeclaration function ->
- writeFunction function
-
- AliasDeclaration typeAlias ->
- writeTypeAlias typeAlias
-
- CustomTypeDeclaration type_ ->
- writeType type_
-
- PortDeclaration p ->
- writePortDeclaration p
-
- InfixDeclaration i ->
- writeInfix i
-
- Destructuring pattern expression ->
- writeDestructuring pattern expression
-
-
-writeFunction : Function -> Writer
-writeFunction { documentation, signature, declaration } =
- breaked
- [ maybe (Maybe.map writeDocumentation documentation)
- , maybe (Maybe.map (Node.value >> writeSignature) signature)
- , writeFunctionImplementation <| Node.value declaration
- ]
-
-
-writeFunctionImplementation : FunctionImplementation -> Writer
-writeFunctionImplementation declaration =
- breaked
- [ spaced
- [ string <| Node.value declaration.name
- , spaced (List.map writePattern declaration.arguments)
- , string "="
- ]
- , indent 4 (writeExpression declaration.expression)
- ]
-
-
-writeSignature : Signature -> Writer
-writeSignature signature =
- spaced
- [ string <| Node.value signature.name
- , string ":"
- , writeTypeAnnotation signature.typeAnnotation
- ]
-
-
-writeDocumentation : Node Documentation -> Writer
-writeDocumentation =
- Node.value >> string
-
-
-writeTypeAlias : TypeAlias -> Writer
-writeTypeAlias typeAlias =
- breaked
- [ spaced
- [ string "type alias"
- , string <| Node.value typeAlias.name
- , spaced (List.map (Node.value >> string) typeAlias.generics)
- , string "="
- ]
- , indent 4 (writeTypeAnnotation typeAlias.typeAnnotation)
- ]
-
-
-writeType : Type -> Writer
-writeType type_ =
- breaked
- [ spaced
- [ string "type"
- , string <| Node.value type_.name
- , spaced (List.map (Node.value >> string) type_.generics)
- ]
- , let
- diffLines =
- List.map Node.range type_.constructors
- |> startOnDifferentLines
- in
- sepBy ( "=", "|", "" )
- diffLines
- (List.map (Node.value >> writeValueConstructor) type_.constructors)
- ]
-
-
-writeValueConstructor : ValueConstructor -> Writer
-writeValueConstructor { name, arguments } =
- spaced
- [ string <| Node.value name
- , spaced (List.map writeTypeAnnotation arguments)
- ]
-
-
-writePortDeclaration : Signature -> Writer
-writePortDeclaration signature =
- spaced [ string "port", writeSignature signature ]
-
-
-writeInfix : Infix -> Writer
-writeInfix { direction, precedence, operator, function } =
- spaced
- [ string "infix"
- , case Node.value direction of
- Left ->
- string "left"
-
- Right ->
- string "right"
-
- Non ->
- string "non"
- , string (String.fromInt (Node.value precedence))
- , string (Node.value operator)
- , string "="
- , string (Node.value function)
- ]
-
-
-writeDestructuring : Node Pattern -> Node Expression -> Writer
-writeDestructuring pattern expression =
- breaked
- [ spaced [ writePattern pattern, string "=" ]
- , indent 4 (writeExpression expression)
- ]
-
-
-{-| Write a type annotation
--}
-writeTypeAnnotation : Node TypeAnnotation -> Writer
-writeTypeAnnotation (Node _ typeAnnotation) =
- case typeAnnotation of
- GenericType s ->
- string s
-
- Typed moduleNameAndName args ->
- let
- moduleName =
- Node.value moduleNameAndName |> Tuple.first
-
- k =
- Node.value moduleNameAndName |> Tuple.second
- in
- spaced
- ((string <| String.join "." (moduleName ++ [ k ]))
- :: List.map (writeTypeAnnotation >> parensIfContainsSpaces) args
- )
-
- Unit ->
- string "()"
-
- Tupled xs ->
- parensComma False (List.map writeTypeAnnotation xs)
-
- Record xs ->
- bracesComma False (List.map writeRecordField xs)
-
- GenericRecord name fields ->
- spaced
- [ string "{"
- , string <| Node.value name
- , string "|"
- , sepByComma False (List.map writeRecordField <| Node.value fields)
- , string "}"
- ]
-
- FunctionTypeAnnotation left right ->
- let
- addParensForSubTypeAnnotation type_ =
- case type_ of
- Node _ (FunctionTypeAnnotation _ _) ->
- join [ string "(", writeTypeAnnotation type_, string ")" ]
-
- _ ->
- writeTypeAnnotation type_
- in
- spaced
- [ addParensForSubTypeAnnotation left
- , string "->"
- , addParensForSubTypeAnnotation right
- ]
-
-
-writeRecordField : Node RecordField -> Writer
-writeRecordField (Node _ ( name, ref )) =
- spaced
- [ string <| Node.value name
- , string ":"
- , writeTypeAnnotation ref
- ]
-
-
-{-| Writer an expression
--}
-writeExpression : Node Expression -> Writer
-writeExpression (Node range inner) =
- let
- recurRangeHelper (Node x y) =
- ( x, writeExpression (Node x y) )
-
- writeRecordSetter : RecordSetter -> ( Range, Writer )
- writeRecordSetter ( name, expr ) =
- ( Node.range expr
- , spaced [ string <| Node.value name, string "=", writeExpression expr ]
- )
-
- sepHelper : (Bool -> List Writer -> Writer) -> List ( Range, Writer ) -> Writer
- sepHelper f l =
- let
- diffLines =
- List.map Tuple.first l
- |> startOnDifferentLines
- in
- f diffLines (List.map Tuple.second l)
-
- fakeSepHelper : (Bool -> List Writer -> Writer) -> List ( Range, Writer ) -> Writer
- fakeSepHelper f l =
- f True (List.map Tuple.second l)
- in
- case inner of
- UnitExpr ->
- string "()"
-
- Application xs ->
- case xs of
- [] ->
- epsilon
-
- [ x ] ->
- writeExpression x
-
- x :: rest ->
- spaced
- [ writeExpression x
- , sepHelper sepBySpace (List.map recurRangeHelper rest)
- ]
-
- OperatorApplication x dir left right ->
- case dir of
- Left ->
- sepHelper sepBySpace
- [ ( Node.range left, writeExpression left )
- , ( range, spaced [ string x, writeExpression right ] )
- ]
-
- Right ->
- sepHelper sepBySpace
- [ ( Node.range left, spaced [ writeExpression left, string x ] )
- , ( Node.range right, writeExpression right )
- ]
-
- Non ->
- sepHelper sepBySpace
- [ ( Node.range left, spaced [ writeExpression left, string x ] )
- , ( Node.range right, writeExpression right )
- ]
-
- FunctionOrValue moduleName name ->
- case moduleName of
- [] ->
- string name
-
- _ ->
- join
- [ writeModuleName <| moduleName
- , string "."
- , string <| name
- ]
-
- IfBlock condition thenCase elseCase ->
- breaked
- [ spaced [ string "if", writeExpression condition, string "then" ]
- , indent 2 (writeExpression thenCase)
- , string "else"
- , indent 2 (writeExpression elseCase)
- ]
-
- PrefixOperator x ->
- string ("(" ++ x ++ ")")
-
- Operator x ->
- string x
-
- Hex h ->
- string "TODO"
-
- Integer i ->
- string (String.fromInt i)
-
- Floatable f ->
- string (String.fromFloat f)
-
- Negation x ->
- append (string "-") (writeExpression x)
-
- Literal s ->
- string ("\"" ++ s ++ "\"")
-
- CharLiteral c ->
- string ("'" ++ String.fromList [ c ] ++ "'")
-
- TupledExpression t ->
- sepHelper sepByComma (List.map recurRangeHelper t)
-
- ParenthesizedExpression x ->
- join [ string "(", writeExpression x, string ")" ]
-
- LetExpression letBlock ->
- breaked
- [ string "let"
- , indent 2 (breaked (List.map writeLetDeclaration letBlock.declarations))
- , string "in"
- , indent 2 (writeExpression letBlock.expression)
- ]
-
- CaseExpression caseBlock ->
- let
- writeCaseBranch ( pattern, expression ) =
- indent 2 <|
- breaked
- [ spaced [ writePattern pattern, string "->" ]
- , indent 2 (writeExpression expression)
- ]
- in
- breaked
- [ spaced [ string "case", writeExpression caseBlock.expression, string "of" ]
- , breaked (List.map writeCaseBranch caseBlock.cases)
- ]
-
- LambdaExpression lambda ->
- spaced
- [ join
- [ string "\\"
- , spaced (List.map writePattern lambda.args)
- ]
- , string "->"
- , writeExpression lambda.expression
- ]
-
- RecordExpr setters ->
- --sepHelper bracesComma (List.map (Node.value >> writeRecordSetter) setters)
- bracesComma True (List.map (Node.value >> (\( name, expr ) -> spaced [ string <| Node.value name, string "=", writeExpression expr ])) setters)
-
- ListExpr xs ->
- fakeSepHelper bracketsComma (List.map recurRangeHelper xs)
-
- RecordAccess expression accessor ->
- join [ writeExpression expression, string ".", string <| Node.value accessor ]
-
- RecordAccessFunction s ->
- join [ string ".", string s ]
-
- RecordUpdateExpression name updates ->
- spaced
- [ string "{"
- , string <| Node.value name
- , string "|"
- , sepHelper sepByComma (List.map (Node.value >> writeRecordSetter) updates)
- , string "}"
- ]
-
- GLSLExpression s ->
- join
- [ string "[glsl|"
- , string s
- , string "|]"
- ]
-
-
-{-| Write a pattern
--}
-writePattern : Node Pattern -> Writer
-writePattern (Node _ p) =
- case p of
- AllPattern ->
- string "_"
-
- UnitPattern ->
- string "()"
-
- CharPattern c ->
- string ("'" ++ String.fromList [ c ] ++ "'")
-
- StringPattern s ->
- string s
-
- HexPattern h ->
- string "TODO"
-
- IntPattern i ->
- string (String.fromInt i)
-
- FloatPattern f ->
- string (String.fromFloat f)
-
- TuplePattern inner ->
- parensComma False (List.map writePattern inner)
-
- RecordPattern inner ->
- bracesComma False (List.map (Node.value >> string) inner)
-
- UnConsPattern left right ->
- spaced [ writePattern left, string "::", writePattern right ]
-
- ListPattern inner ->
- bracketsComma False (List.map writePattern inner)
-
- VarPattern var ->
- string var
-
- NamedPattern qnr others ->
- spaced
- [ writeQualifiedNameRef qnr
- , spaced (List.map writePattern others)
- ]
-
- AsPattern innerPattern asName ->
- spaced [ writePattern innerPattern, string "as", string <| Node.value asName ]
-
- ParenthesizedPattern innerPattern ->
- spaced [ string "(", writePattern innerPattern, string ")" ]
-
-
-writeQualifiedNameRef : QualifiedNameRef -> Writer
-writeQualifiedNameRef { moduleName, name } =
- case moduleName of
- [] ->
- string name
-
- _ ->
- join
- [ writeModuleName moduleName
- , string "."
- , string name
- ]
-
-
-
--- Helpers
-
-
-parensIfContainsSpaces : Writer -> Writer
-parensIfContainsSpaces w =
- if Writer.write w |> String.contains " " then
- join [ string "(", w, string ")" ]
- else
- w
[cgit] Unable to lock slot /tmp/cgit/54000000.lock: No such file or directory (2)