From 42a4824d0f5a72a0725140d5a13069b5435be538 Mon Sep 17 00:00:00 2001
From: glennvorhes <gavorhes@wisc.edu>
Date: Wed, 18 Sep 2019 15:46:03 -0500
Subject: [PATCH] es5 target

---
 dist/_tests/demos/animate.js                  |  34 +-
 dist/_tests/demos/animate.js.map              |   2 +-
 dist/_tests/demos/compare-test.js             |  20 +-
 dist/_tests/demos/compare-test.js.map         |   2 +-
 dist/_tests/demos/geocode.js                  |   8 +-
 dist/_tests/demos/geocode.js.map              |   2 +-
 dist/_tests/demos/itsMap.js                   |  14 +-
 dist/_tests/demos/itsMap.js.map               |   2 +-
 dist/_tests/demos/mapPopup.js                 |  24 +-
 dist/_tests/demos/mapPopup.js.map             |   2 +-
 dist/_tests/demos/my_little_test.js           |   5 +-
 dist/_tests/demos/my_little_test.js.map       |   2 +-
 dist/_tests/demos/range_media.js              |   6 +-
 dist/_tests/demos/range_media.js.map          |   2 +-
 dist/_tests/demos/reacttst_connect.js         |  22 +-
 dist/_tests/demos/reacttst_connect.js.map     |   2 +-
 dist/_tests/demos/reacttst_store.js           |  16 +-
 dist/_tests/demos/reacttst_store.js.map       |   2 +-
 dist/_tests/demos/simple_map.js               |  16 +-
 dist/_tests/demos/simple_map.js.map           |   2 +-
 dist/_tests/demos/slider-test.js              |   6 +-
 dist/_tests/demos/slider-test.js.map          |   2 +-
 dist/api/_npmrdsEmpty.js                      |   2 +-
 dist/api/_npmrdsInterfaces.js                 |   2 +-
 dist/api/axios.js                             |  39 +-
 dist/api/axios.js.map                         |   2 +-
 dist/api/host.js                              |   8 +-
 dist/api/host.js.map                          |   2 +-
 dist/api/npmrds.js                            |  64 ++-
 dist/api/npmrds.js.map                        |   2 +-
 dist/api/stn.js                               |  91 ++--
 dist/api/stn.js.map                           |   2 +-
 dist/collections/ItsLayerCollection.js        |  45 +-
 dist/collections/ItsLayerCollection.js.map    |   2 +-
 dist/collections/LayerLegend.js               | 118 +++--
 dist/collections/LayerLegend.js.map           |   2 +-
 dist/collections/Sliders.js                   | 441 ++++++++---------
 dist/collections/Sliders.js.map               |   2 +-
 dist/domUtil/SelectBoxBase.js                 | 127 +++--
 dist/domUtil/SelectBoxBase.js.map             |   2 +-
 dist/domUtil/day-range.js                     | 105 ++--
 dist/domUtil/day-range.js.map                 |   2 +-
 dist/domUtil/media-control.js                 | 168 +++----
 dist/domUtil/media-control.js.map             |   2 +-
 dist/domUtil/range-change.js                  |  26 +-
 dist/domUtil/range-change.js.map              |   2 +-
 dist/import-queryui.js                        |   2 +-
 dist/import-queryui.js.map                    |   2 +-
 dist/layers/LayerBase.js                      | 451 ++++++++----------
 dist/layers/LayerBase.js.map                  |   2 +-
 dist/layers/LayerBaseVector.js                | 345 ++++++--------
 dist/layers/LayerBaseVector.js.map            |   2 +-
 dist/layers/LayerBaseVectorEsri.js            | 119 ++---
 dist/layers/LayerBaseVectorEsri.js.map        |   2 +-
 dist/layers/LayerBaseVectorGeoJson.js         |  75 ++-
 dist/layers/LayerBaseVectorGeoJson.js.map     |   2 +-
 dist/layers/LayerBaseXyzTile.js               |  71 +--
 dist/layers/LayerBaseXyzTile.js.map           |   2 +-
 dist/layers/LayerEsriMapServer.js             | 133 ++----
 dist/layers/LayerEsriMapServer.js.map         |   2 +-
 dist/layers/LayerEsriTile.js                  |  60 +--
 dist/layers/LayerEsriTile.js.map              |   2 +-
 dist/layers/LayerItsInventory.js              | 125 ++---
 dist/layers/LayerItsInventory.js.map          |   2 +-
 dist/layers/LayerRealEarthTile.js             |  53 +-
 dist/layers/LayerRealEarthTile.js.map         |   2 +-
 dist/layers/LayerRealEarthVector.js           |  51 +-
 dist/layers/LayerRealEarthVector.js.map       |   2 +-
 dist/mixin/RealEarthAnimate.js                |  68 ++-
 dist/mixin/RealEarthAnimate.js.map            |   2 +-
 dist/mixin/RealEarthAnimateTile.js            |  60 +--
 dist/mixin/RealEarthAnimateTile.js.map        |   2 +-
 dist/mixin/RealEarthAnimateVector.js          |  83 ++--
 dist/mixin/RealEarthAnimateVector.js.map      |   2 +-
 dist/olHelpers/esriToOlStyle.js               | 296 +++++-------
 dist/olHelpers/esriToOlStyle.js.map           |   2 +-
 dist/olHelpers/extentUtil.js                  |  23 +-
 dist/olHelpers/extentUtil.js.map              |   2 +-
 dist/olHelpers/geocode.js                     |  86 ++--
 dist/olHelpers/geocode.js.map                 |   2 +-
 dist/olHelpers/layerSwipe.js                  | 101 ++--
 dist/olHelpers/layerSwipe.js.map              |   2 +-
 dist/olHelpers/mapInteractionBase.js          |  61 +--
 dist/olHelpers/mapInteractionBase.js.map      |   2 +-
 dist/olHelpers/mapMove.js                     |   2 +-
 dist/olHelpers/mapMove.js.map                 |   2 +-
 dist/olHelpers/mapMoveCls.js                  | 140 +++---
 dist/olHelpers/mapMoveCls.js.map              |   2 +-
 dist/olHelpers/mapPopup.js                    |   2 +-
 dist/olHelpers/mapPopup.js.map                |   2 +-
 dist/olHelpers/mapPopupCls.js                 | 309 ++++++------
 dist/olHelpers/mapPopupCls.js.map             |   2 +-
 dist/olHelpers/mapToBase64.js                 |  28 +-
 dist/olHelpers/mapToBase64.js.map             |   2 +-
 dist/olHelpers/projections.js                 |   2 +-
 dist/olHelpers/projections.js.map             |   2 +-
 dist/olHelpers/propertiesZoomStyle.js         |   6 +-
 dist/olHelpers/propertiesZoomStyle.js.map     |   2 +-
 dist/olHelpers/quickMap.js                    |  15 +-
 dist/olHelpers/quickMap.js.map                |   2 +-
 dist/olHelpers/quickMapBase.js                |  41 +-
 dist/olHelpers/quickMapBase.js.map            |   2 +-
 dist/olHelpers/quickMapMulti.js               |  16 +-
 dist/olHelpers/quickMapMulti.js.map           |   2 +-
 dist/olHelpers/sortedFeatures.js              |  39 +-
 dist/olHelpers/sortedFeatures.js.map          |   2 +-
 dist/olHelpers/zoomResolutionConvert.js       |  10 +-
 dist/olHelpers/zoomResolutionConvert.js.map   |   2 +-
 dist/reactComponents/DatePick.js              |  64 +--
 dist/reactComponents/DatePick.js.map          |   2 +-
 dist/reactComponents/DateRange.js             | 141 +++---
 dist/reactComponents/DateRange.js.map         |   2 +-
 dist/reactComponents/Radio.js                 | 122 ++---
 dist/reactComponents/Radio.js.map             |   2 +-
 dist/reactComponents/SelectArea.js            | 105 ++--
 dist/reactComponents/SelectArea.js.map        |   2 +-
 dist/reactComponents/Slider.js                | 158 +++---
 dist/reactComponents/Slider.js.map            |   2 +-
 dist/reactComponents/helpers/dateFormat.js    |  19 +-
 .../reactComponents/helpers/dateFormat.js.map |   2 +-
 dist/reactComponents/helpers/get_map.js       |  12 +-
 dist/reactComponents/helpers/get_map.js.map   |   2 +-
 dist/util/_index.js                           |   2 +-
 dist/util/_index.js.map                       |   2 +-
 dist/util/checkDefined.js                     |   4 +-
 dist/util/checkDefined.js.map                 |   2 +-
 dist/util/colors.js                           |  40 +-
 dist/util/colors.js.map                       |   2 +-
 dist/util/dateConvert.js                      |  30 +-
 dist/util/dateConvert.js.map                  |   2 +-
 dist/util/formatString.js                     |   4 +-
 dist/util/getUrlParams.js                     |  22 +-
 dist/util/getUrlParams.js.map                 |   2 +-
 dist/util/get_browser.js                      |   2 +-
 dist/util/makeGuid.js                         |   6 +-
 dist/util/makeGuid.js.map                     |   2 +-
 dist/util/objectHelpers.js                    |   9 +-
 dist/util/objectHelpers.js.map                |   2 +-
 dist/util/provide.js                          |   8 +-
 tsconfig.json                                 |   2 +-
 140 files changed, 2222 insertions(+), 2942 deletions(-)

diff --git a/dist/_tests/demos/animate.js b/dist/_tests/demos/animate.js
index 9debffd..c942714 100644
--- a/dist/_tests/demos/animate.js
+++ b/dist/_tests/demos/animate.js
@@ -1,12 +1,12 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var quickMap_1 = require("../../olHelpers/quickMap");
-var LayerRealEarthTile_1 = require("../../layers/LayerRealEarthTile");
-var media_control_1 = require("../../domUtil/media-control");
-var $ = require("jquery");
-var LayerBaseVectorEsri_1 = require("../../layers/LayerBaseVectorEsri");
-var LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
-var nexrhresStatic = new LayerRealEarthTile_1.default({
+const quickMap_1 = require("../../olHelpers/quickMap");
+const LayerRealEarthTile_1 = require("../../layers/LayerRealEarthTile");
+const media_control_1 = require("../../domUtil/media-control");
+const $ = require("jquery");
+const LayerBaseVectorEsri_1 = require("../../layers/LayerBaseVectorEsri");
+const LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
+let nexrhresStatic = new LayerRealEarthTile_1.default({
     products: 'nexrhres',
     id: 'nexrhres-static',
     opacity: 0.6,
@@ -17,12 +17,12 @@ var nexrhresStatic = new LayerRealEarthTile_1.default({
         console.log(f);
     }
 });
-var d = new Date();
-var endTime = d.getTime();
+let d = new Date();
+let endTime = d.getTime();
 d.setHours(d.getHours() - 4);
-var startTime = d.getTime();
-var rangeStep = Math.round((endTime - startTime) / 8);
-var media = new media_control_1.MediaControl($('#control'), function (v) {
+let startTime = d.getTime();
+let rangeStep = Math.round((endTime - startTime) / 8);
+let media = new media_control_1.MediaControl($('#control'), (v) => {
     nexrhresStatic.setLayerTime(v);
 }, {
     min: startTime,
@@ -32,16 +32,16 @@ var media = new media_control_1.MediaControl($('#control'), function (v) {
     playInterval: 750,
     showAsDate: true
 });
-var map = quickMap_1.quickMap();
+let map = quickMap_1.quickMap();
 map.addLayer(nexrhresStatic.olLayer);
-var coordinationLayer = new LayerBaseVectorEsri_1.LayerBaseVectorEsri('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0', {
+let coordinationLayer = new LayerBaseVectorEsri_1.LayerBaseVectorEsri('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0', {
     visible: true,
     autoLoad: true,
     name: 'Coordination',
     useEsriStyle: true
 });
 map.addLayer(coordinationLayer.olLayer);
-var oakRidgeLayers = [
+let oakRidgeLayers = [
     ['Cameras', 'cameras33'],
     ['HAR', 'HAR33'],
     ['DMS', 'MessageSigns33'],
@@ -50,8 +50,8 @@ var oakRidgeLayers = [
     ['Traffic Detection', 'TrafficDetectionMulti'],
     ['Weather', 'Weather33']
 ];
-for (var i = 0; i < oakRidgeLayers.length; i++) {
-    var oakRidgeLayer = new LayerEsriMapServer_1.LayerEsriMapServer("http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/" + oakRidgeLayers[i][1] + "/MapServer", {
+for (let i = 0; i < oakRidgeLayers.length; i++) {
+    let oakRidgeLayer = new LayerEsriMapServer_1.LayerEsriMapServer(`http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/${oakRidgeLayers[i][1]}/MapServer`, {
         id: oakRidgeLayers[i][1],
         name: oakRidgeLayers[i][0],
         visible: true,
diff --git a/dist/_tests/demos/animate.js.map b/dist/_tests/demos/animate.js.map
index 2083489..2f94fc2 100644
--- a/dist/_tests/demos/animate.js.map
+++ b/dist/_tests/demos/animate.js.map
@@ -1 +1 @@
-{"version":3,"file":"animate.js","sourceRoot":"","sources":["../../../src/_tests/demos/animate.ts"],"names":[],"mappings":";;AAAA,qDAAkD;AAClD,sEAAiE;AACjE,6DAAyE;AACzE,0BAA6B;AAC7B,wEAAqE;AACrE,sEAAmE;AAEnE,IAAI,cAAc,GAAG,IAAI,4BAAkB,CAAC;IACpC,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,qBAAqB;IAC3B,eAAe;IACf,gBAAgB,EAAE,UAAU,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACJ,CACJ,CAAC;AAGF,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACnB,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtD,IAAI,KAAK,GAAG,IAAI,4BAAY,CACxB,CAAC,CAAC,UAAU,CAAC,EACb,UAAC,CAAS;IACN,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,EACD;IACI,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,IAAI;CACnB,CACJ,CAAC;AAGF,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AACrB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAGrC,IAAI,iBAAiB,GAAG,IAAI,yCAAmB,CAC3C,2GAA2G,EAC3G;IACI,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEpC,IAAI,cAAc,GAAG;IACjB,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,oCAAoC;IACpC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IACvC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;IAC9C,CAAC,SAAS,EAAE,WAAW,CAAC;CAC3B,CAAC;AAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC5C,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,4DAA0D,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAY,EAC1F;QACI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;KACvB,CACJ,CAAC;IACF,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC","sourcesContent":["import {quickMap} from '../../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../../layers/LayerEsriMapServer\";\r\n\r\nlet nexrhresStatic = new LayerRealEarthTile({\r\n        products: 'nexrhres',\r\n        id: 'nexrhres-static',\r\n        opacity: 0.6,\r\n        animate: true,\r\n        name: 'Hybrid Reflectivity',\r\n        // maxZoom: 10,\r\n        timeLoadCallback: function (f) {\r\n            console.log(f);\r\n        }\r\n    }\r\n);\r\n\r\n\r\nlet d = new Date();\r\nlet endTime = d.getTime();\r\nd.setHours(d.getHours() - 4);\r\nlet startTime = d.getTime();\r\nlet rangeStep = Math.round((endTime - startTime) / 8);\r\n\r\nlet media = new MediaControl(\r\n    $('#control'),\r\n    (v: number) => {\r\n        nexrhresStatic.setLayerTime(v);\r\n    },\r\n    {\r\n        min: startTime,\r\n        max: endTime,\r\n        val: endTime,\r\n        step: rangeStep,\r\n        playInterval: 750,\r\n        showAsDate: true\r\n    }\r\n);\r\n\r\n\r\nlet map = quickMap();\r\nmap.addLayer(nexrhresStatic.olLayer);\r\n\r\n\r\nlet coordinationLayer = new LayerBaseVectorEsri(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0',\r\n    {\r\n        visible: true,\r\n        autoLoad: true,\r\n        name: 'Coordination',\r\n        useEsriStyle: true\r\n    }\r\n);\r\n\r\nmap.addLayer(coordinationLayer.olLayer);\r\n\r\n    let oakRidgeLayers = [\r\n        ['Cameras', 'cameras33'],\r\n        ['HAR', 'HAR33'],\r\n        ['DMS', 'MessageSigns33'],\r\n        //['State Summary', 'statesummary'],\r\n        ['Traffic Control', 'TrafficControl33'],\r\n        ['Traffic Detection', 'TrafficDetectionMulti'],\r\n        ['Weather', 'Weather33']\r\n    ];\r\n\r\n\r\n    for (let i = 0; i < oakRidgeLayers.length; i++) {\r\n        let oakRidgeLayer = new LayerEsriMapServer(\r\n            `http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/${oakRidgeLayers[i][1]}/MapServer`,\r\n            {\r\n                id: oakRidgeLayers[i][1],\r\n                name: oakRidgeLayers[i][0],\r\n                visible: true,\r\n                minZoom: 7,\r\n                zIndex: 20,\r\n                addPopup: true,\r\n                legendCollapse: true\r\n            }\r\n        );\r\n        map.addLayer(oakRidgeLayer.olLayer);\r\n    }\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"animate.js","sourceRoot":"","sources":["../../../src/_tests/demos/animate.ts"],"names":[],"mappings":";;AAAA,uDAAkD;AAClD,wEAAiE;AACjE,+DAAyE;AACzE,4BAA6B;AAC7B,0EAAqE;AACrE,wEAAmE;AAEnE,IAAI,cAAc,GAAG,IAAI,4BAAkB,CAAC;IACpC,QAAQ,EAAE,UAAU;IACpB,EAAE,EAAE,iBAAiB;IACrB,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,qBAAqB;IAC3B,eAAe;IACf,gBAAgB,EAAE,UAAU,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACJ,CACJ,CAAC;AAGF,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACnB,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7B,IAAI,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtD,IAAI,KAAK,GAAG,IAAI,4BAAY,CACxB,CAAC,CAAC,UAAU,CAAC,EACb,CAAC,CAAS,EAAE,EAAE;IACV,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,EACD;IACI,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;IACZ,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,IAAI;CACnB,CACJ,CAAC;AAGF,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AACrB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAGrC,IAAI,iBAAiB,GAAG,IAAI,yCAAmB,CAC3C,2GAA2G,EAC3G;IACI,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEpC,IAAI,cAAc,GAAG;IACjB,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACzB,oCAAoC;IACpC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IACvC,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;IAC9C,CAAC,SAAS,EAAE,WAAW,CAAC;CAC3B,CAAC;AAGF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC5C,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,0DAA0D,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAC1F;QACI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;KACvB,CACJ,CAAC;IACF,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;CACvC","sourcesContent":["import {quickMap} from '../../olHelpers/quickMap';\r\nimport LayerRealEarthTile from \"../../layers/LayerRealEarthTile\";\r\nimport {MediaControl, changeFunction} from \"../../domUtil/media-control\";\r\nimport $ = require('jquery');\r\nimport {LayerBaseVectorEsri} from \"../../layers/LayerBaseVectorEsri\";\r\nimport {LayerEsriMapServer} from \"../../layers/LayerEsriMapServer\";\r\n\r\nlet nexrhresStatic = new LayerRealEarthTile({\r\n        products: 'nexrhres',\r\n        id: 'nexrhres-static',\r\n        opacity: 0.6,\r\n        animate: true,\r\n        name: 'Hybrid Reflectivity',\r\n        // maxZoom: 10,\r\n        timeLoadCallback: function (f) {\r\n            console.log(f);\r\n        }\r\n    }\r\n);\r\n\r\n\r\nlet d = new Date();\r\nlet endTime = d.getTime();\r\nd.setHours(d.getHours() - 4);\r\nlet startTime = d.getTime();\r\nlet rangeStep = Math.round((endTime - startTime) / 8);\r\n\r\nlet media = new MediaControl(\r\n    $('#control'),\r\n    (v: number) => {\r\n        nexrhresStatic.setLayerTime(v);\r\n    },\r\n    {\r\n        min: startTime,\r\n        max: endTime,\r\n        val: endTime,\r\n        step: rangeStep,\r\n        playInterval: 750,\r\n        showAsDate: true\r\n    }\r\n);\r\n\r\n\r\nlet map = quickMap();\r\nmap.addLayer(nexrhresStatic.olLayer);\r\n\r\n\r\nlet coordinationLayer = new LayerBaseVectorEsri(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/GLRTOC/GlrtocCoordination/MapServer/0',\r\n    {\r\n        visible: true,\r\n        autoLoad: true,\r\n        name: 'Coordination',\r\n        useEsriStyle: true\r\n    }\r\n);\r\n\r\nmap.addLayer(coordinationLayer.olLayer);\r\n\r\n    let oakRidgeLayers = [\r\n        ['Cameras', 'cameras33'],\r\n        ['HAR', 'HAR33'],\r\n        ['DMS', 'MessageSigns33'],\r\n        //['State Summary', 'statesummary'],\r\n        ['Traffic Control', 'TrafficControl33'],\r\n        ['Traffic Detection', 'TrafficDetectionMulti'],\r\n        ['Weather', 'Weather33']\r\n    ];\r\n\r\n\r\n    for (let i = 0; i < oakRidgeLayers.length; i++) {\r\n        let oakRidgeLayer = new LayerEsriMapServer(\r\n            `http://itsdpro.ornl.gov/arcgis/rest/services/ITSPublic/${oakRidgeLayers[i][1]}/MapServer`,\r\n            {\r\n                id: oakRidgeLayers[i][1],\r\n                name: oakRidgeLayers[i][0],\r\n                visible: true,\r\n                minZoom: 7,\r\n                zIndex: 20,\r\n                addPopup: true,\r\n                legendCollapse: true\r\n            }\r\n        );\r\n        map.addLayer(oakRidgeLayer.olLayer);\r\n    }\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/compare-test.js b/dist/_tests/demos/compare-test.js
index ee1ec52..a8d9a36 100644
--- a/dist/_tests/demos/compare-test.js
+++ b/dist/_tests/demos/compare-test.js
@@ -3,28 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 6/1/2016.
  */
-var quickMap_1 = require("../../olHelpers/quickMap");
-var layerSwipe_1 = require("../../olHelpers/layerSwipe");
-var LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
-var map = quickMap_1.quickMap();
-var swiper = new layerSwipe_1.default(map);
-var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {
+const quickMap_1 = require("../../olHelpers/quickMap");
+const layerSwipe_1 = require("../../olHelpers/layerSwipe");
+const LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
+let map = quickMap_1.quickMap();
+let swiper = new layerSwipe_1.default(map);
+let wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer', {
     minZoom: 6,
     maxZoom: 12,
     name: 'WisDOT Regions'
 });
-var metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {
+let metamanagerSegments = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer', {
     minZoom: 7,
     visible: true,
     name: 'Metamanager Segments'
 });
-var truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+let truckSpeed2014 = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
     minZoom: 7,
     visible: true,
     name: 'truck2014',
     showLayers: [8]
 });
-var truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
+let truckSpeed2015 = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer', {
     minZoom: 7,
     visible: true,
     name: 'truck2015',
@@ -38,6 +38,6 @@ swiper.addLeftLayer(wisDotRegions);
 swiper.addRightLayer(metamanagerSegments);
 swiper.addLeftLayer(truckSpeed2014);
 swiper.addRightLayer(truckSpeed2015);
-setTimeout(function () {
+setTimeout(() => {
 }, 5000);
 //# sourceMappingURL=compare-test.js.map
\ No newline at end of file
diff --git a/dist/_tests/demos/compare-test.js.map b/dist/_tests/demos/compare-test.js.map
index 0664f31..0d6e285 100644
--- a/dist/_tests/demos/compare-test.js.map
+++ b/dist/_tests/demos/compare-test.js.map
@@ -1 +1 @@
-{"version":3,"file":"compare-test.js","sourceRoot":"","sources":["../../../src/_tests/demos/compare-test.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,qDAAkD;AAClD,yDAAoD;AACpD,sEAAmE;AAEnE,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAGrB,IAAI,MAAM,GAAG,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC;AAGjC,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,+GAA+G,EAC/G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEP,IAAI,mBAAmB,GAAG,IAAI,uCAAkB,CAC5C,2GAA2G,EAC3G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,sBAAsB;CAC/B,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,qGAAqG,EACrG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,qGAAqG,EACrG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAG1C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACnC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAE1C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACpC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAErC,UAAU,CAAC;AAEX,CAAC,EAAE,IAAI,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../../olHelpers/quickMap';\r\nimport LayerSwipe from '../../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../../layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap();\r\n\r\n\r\nlet swiper = new LayerSwipe(map);\r\n\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer',\r\n    {\r\n        minZoom: 6,\r\n        maxZoom: 12,\r\n        name: 'WisDOT Regions'\r\n    });\r\n\r\nlet metamanagerSegments = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'Metamanager Segments'\r\n    });\r\n\r\nlet truckSpeed2014 = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2014',\r\n        showLayers: [8]\r\n    });\r\n\r\nlet truckSpeed2015 = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2015',\r\n        showLayers: [9]\r\n    });\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\n\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\r\nsetTimeout(() => {\r\n\r\n}, 5000);\r\n"]}
\ No newline at end of file
+{"version":3,"file":"compare-test.js","sourceRoot":"","sources":["../../../src/_tests/demos/compare-test.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,uDAAkD;AAClD,2DAAoD;AACpD,wEAAmE;AAEnE,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAGrB,IAAI,MAAM,GAAG,IAAI,oBAAU,CAAC,GAAG,CAAC,CAAC;AAGjC,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,+GAA+G,EAC/G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEP,IAAI,mBAAmB,GAAG,IAAI,uCAAkB,CAC5C,2GAA2G,EAC3G;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,sBAAsB;CAC/B,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,qGAAqG,EACrG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,IAAI,cAAc,GAAG,IAAI,uCAAkB,CACvC,qGAAqG,EACrG;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,CAAC,CAAC,CAAC;CAClB,CAAC,CAAC;AAEP,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAG1C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACnC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAE1C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACpC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAErC,UAAU,CAAC,GAAG,EAAE;AAEhB,CAAC,EAAE,IAAI,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\nimport {quickMap} from '../../olHelpers/quickMap';\r\nimport LayerSwipe from '../../olHelpers/layerSwipe';\r\nimport {LayerEsriMapServer} from '../../layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap();\r\n\r\n\r\nlet swiper = new LayerSwipe(map);\r\n\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer',\r\n    {\r\n        minZoom: 6,\r\n        maxZoom: 12,\r\n        name: 'WisDOT Regions'\r\n    });\r\n\r\nlet metamanagerSegments = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'Metamanager Segments'\r\n    });\r\n\r\nlet truckSpeed2014 = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2014',\r\n        showLayers: [8]\r\n    });\r\n\r\nlet truckSpeed2015 = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/NPMRDS/compareDynamic/MapServer',\r\n    {\r\n        minZoom: 7,\r\n        visible: true,\r\n        name: 'truck2015',\r\n        showLayers: [9]\r\n    });\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(truckSpeed2014.olLayer);\r\nmap.addLayer(truckSpeed2015.olLayer);\r\nmap.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\nswiper.addLeftLayer(wisDotRegions);\r\nswiper.addRightLayer(metamanagerSegments);\r\n\r\nswiper.addLeftLayer(truckSpeed2014);\r\nswiper.addRightLayer(truckSpeed2015);\r\n\r\nsetTimeout(() => {\r\n\r\n}, 5000);\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/geocode.js b/dist/_tests/demos/geocode.js
index c734baf..3857ecd 100644
--- a/dist/_tests/demos/geocode.js
+++ b/dist/_tests/demos/geocode.js
@@ -1,13 +1,13 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var quickMap_1 = require("../../olHelpers/quickMap");
-var mapToBase64_1 = require("../../olHelpers/mapToBase64");
-var map = quickMap_1.default({ addGeocode: true });
+const quickMap_1 = require("../../olHelpers/quickMap");
+const mapToBase64_1 = require("../../olHelpers/mapToBase64");
+let map = quickMap_1.default({ addGeocode: true });
 window['map'] = map;
 function callback(d) {
     console.log(d);
 }
-setTimeout(function () {
+setTimeout(() => {
     mapToBase64_1.mapToBase64(map, callback, { delay: 1500 });
 }, 2000);
 console.log('it works');
diff --git a/dist/_tests/demos/geocode.js.map b/dist/_tests/demos/geocode.js.map
index e263129..1d0c280 100644
--- a/dist/_tests/demos/geocode.js.map
+++ b/dist/_tests/demos/geocode.js.map
@@ -1 +1 @@
-{"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../../src/_tests/demos/geocode.ts"],"names":[],"mappings":";;AAEA,qDAAgD;AAChD,2DAAwD;AACxD,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAEvC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAEpB,SAAS,QAAQ,CAAC,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,UAAU,CAAC;IACP,yBAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;AAC9C,CAAC,EAAE,IAAI,CAAC,CAAC;AAGT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import ItsLayerCollection from '../../collections/ItsLayerCollection';\r\nimport LayerLegend from '../../collections/LayerLegend';\r\nimport quickMap from '../../olHelpers/quickMap';\r\nimport {mapToBase64} from '../../olHelpers/mapToBase64';\r\nlet map = quickMap({addGeocode: true});\r\n\r\nwindow['map'] = map;\r\n\r\nfunction callback(d: string){\r\n    console.log(d);\r\n}\r\n\r\nsetTimeout(() => {\r\n    mapToBase64(map, callback, {delay: 1500});\r\n}, 2000);\r\n\r\n\r\nconsole.log('it works');\r\n"]}
\ No newline at end of file
+{"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../../src/_tests/demos/geocode.ts"],"names":[],"mappings":";;AAEA,uDAAgD;AAChD,6DAAwD;AACxD,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAEvC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAEpB,SAAS,QAAQ,CAAC,CAAS;IACvB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACZ,yBAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;AAC9C,CAAC,EAAE,IAAI,CAAC,CAAC;AAGT,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import ItsLayerCollection from '../../collections/ItsLayerCollection';\r\nimport LayerLegend from '../../collections/LayerLegend';\r\nimport quickMap from '../../olHelpers/quickMap';\r\nimport {mapToBase64} from '../../olHelpers/mapToBase64';\r\nlet map = quickMap({addGeocode: true});\r\n\r\nwindow['map'] = map;\r\n\r\nfunction callback(d: string){\r\n    console.log(d);\r\n}\r\n\r\nsetTimeout(() => {\r\n    mapToBase64(map, callback, {delay: 1500});\r\n}, 2000);\r\n\r\n\r\nconsole.log('it works');\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/itsMap.js b/dist/_tests/demos/itsMap.js
index b6861be..58406e5 100644
--- a/dist/_tests/demos/itsMap.js
+++ b/dist/_tests/demos/itsMap.js
@@ -3,13 +3,13 @@
  * Created by gavorhes on 12/18/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var ItsLayerCollection_1 = require("../../collections/ItsLayerCollection");
-var LayerLegend_1 = require("../../collections/LayerLegend");
-var quickMap_1 = require("../../olHelpers/quickMap");
-var map = quickMap_1.default({ addGeocode: true });
+const ItsLayerCollection_1 = require("../../collections/ItsLayerCollection");
+const LayerLegend_1 = require("../../collections/LayerLegend");
+const quickMap_1 = require("../../olHelpers/quickMap");
+let map = quickMap_1.default({ addGeocode: true });
 window['map'] = map;
-var itsLayerCollection = new ItsLayerCollection_1.default(map);
-var layerArray = [
+let itsLayerCollection = new ItsLayerCollection_1.default(map);
+let layerArray = [
     {
         groupName: 'ITS Inventory Layers',
         collapse: false,
@@ -17,6 +17,6 @@ var layerArray = [
         items: itsLayerCollection.layers
     }
 ];
-var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
+let legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
 console.log('it works');
 //# sourceMappingURL=itsMap.js.map
\ No newline at end of file
diff --git a/dist/_tests/demos/itsMap.js.map b/dist/_tests/demos/itsMap.js.map
index 7ee3d18..5078dc7 100644
--- a/dist/_tests/demos/itsMap.js.map
+++ b/dist/_tests/demos/itsMap.js.map
@@ -1 +1 @@
-{"version":3,"file":"itsMap.js","sourceRoot":"","sources":["../../../src/_tests/demos/itsMap.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,2EAAsE;AACtE,6DAAwD;AACxD,qDAAgD;AAEhD,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAGvC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAEpB,IAAI,kBAAkB,GAAG,IAAI,4BAAkB,CAAC,GAAG,CAAC,CAAC;AAErD,IAAI,UAAU,GAAG;IACb;QACI,SAAS,EAAE,sBAAsB;QACjC,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,kBAAkB,CAAC,MAAM;KACnC;CACJ,CAAC;AAEF,IAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAEjE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport ItsLayerCollection from '../../collections/ItsLayerCollection';\r\nimport LayerLegend from '../../collections/LayerLegend';\r\nimport quickMap from '../../olHelpers/quickMap';\r\n\r\nlet map = quickMap({addGeocode: true});\r\n\r\n\r\nwindow['map'] = map;\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\nconsole.log('it works');\r\n"]}
\ No newline at end of file
+{"version":3,"file":"itsMap.js","sourceRoot":"","sources":["../../../src/_tests/demos/itsMap.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,6EAAsE;AACtE,+DAAwD;AACxD,uDAAgD;AAEhD,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAGvC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAEpB,IAAI,kBAAkB,GAAG,IAAI,4BAAkB,CAAC,GAAG,CAAC,CAAC;AAErD,IAAI,UAAU,GAAG;IACb;QACI,SAAS,EAAE,sBAAsB;QACjC,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,kBAAkB,CAAC,MAAM;KACnC;CACJ,CAAC;AAEF,IAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAEjE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport ItsLayerCollection from '../../collections/ItsLayerCollection';\r\nimport LayerLegend from '../../collections/LayerLegend';\r\nimport quickMap from '../../olHelpers/quickMap';\r\n\r\nlet map = quickMap({addGeocode: true});\r\n\r\n\r\nwindow['map'] = map;\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\nconsole.log('it works');\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/mapPopup.js b/dist/_tests/demos/mapPopup.js
index ed3e2fd..cbf05b3 100644
--- a/dist/_tests/demos/mapPopup.js
+++ b/dist/_tests/demos/mapPopup.js
@@ -3,13 +3,13 @@
  * Created by gavorhes on 12/18/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var quickMap_1 = require("../../olHelpers/quickMap");
-var layers_1 = require("../../layers");
-var mapPopup_1 = require("../../olHelpers/mapPopup");
-var Style_1 = require("ol/style/Style");
-var Stroke_1 = require("ol/style/Stroke");
-var Fill_1 = require("ol/style/Fill");
-var reg = {
+const quickMap_1 = require("../../olHelpers/quickMap");
+const layers_1 = require("../../layers");
+const mapPopup_1 = require("../../olHelpers/mapPopup");
+const Style_1 = require("ol/style/Style");
+const Stroke_1 = require("ol/style/Stroke");
+const Fill_1 = require("ol/style/Fill");
+const reg = {
     "type": "FeatureCollection",
     "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
     "features": [
@@ -23,7 +23,7 @@ var reg = {
         }
     ]
 };
-var reg2 = {
+const reg2 = {
     "type": "FeatureCollection",
     "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
     "features": [
@@ -37,8 +37,8 @@ var reg2 = {
         }
     ]
 };
-var map = quickMap_1.default({ addGeocode: true });
-var regionLayer = new layers_1.LayerBaseVectorGeoJson('', {
+let map = quickMap_1.default({ addGeocode: true });
+let regionLayer = new layers_1.LayerBaseVectorGeoJson('', {
     minZoom: 6,
     maxZoom: 12,
     name: 'WisDOT Regions',
@@ -52,7 +52,7 @@ var regionLayer = new layers_1.LayerBaseVectorGeoJson('', {
         })
     })
 });
-var regionLayer2 = new layers_1.LayerBaseVectorGeoJson('', {
+let regionLayer2 = new layers_1.LayerBaseVectorGeoJson('', {
     minZoom: 6,
     maxZoom: 12,
     name: 'WisDOT Regions',
@@ -70,7 +70,7 @@ regionLayer.addFeatures(reg);
 regionLayer2.addFeatures(reg2);
 map.addLayer(regionLayer.olLayer);
 map.addLayer(regionLayer2.olLayer);
-mapPopup_1.mapPopup.addVectorPopup(regionLayer2, function (p) { return 'cats'; });
+mapPopup_1.mapPopup.addVectorPopup(regionLayer2, (p) => { return 'cats'; });
 window['map'] = map;
 //
 // let itsLayerCollection = new ItsLayerCollection(map);
diff --git a/dist/_tests/demos/mapPopup.js.map b/dist/_tests/demos/mapPopup.js.map
index 5e5ac86..b1ef79d 100644
--- a/dist/_tests/demos/mapPopup.js.map
+++ b/dist/_tests/demos/mapPopup.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../../src/_tests/demos/mapPopup.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,qDAAgD;AAChD,uCAAoD;AACpD,qDAAkD;AAClD,wCAAmC;AACnC,0CAAqC;AACrC,sCAAiC;AAIjC,IAAM,GAAG,GAAG;IACR,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAC,MAAM,EAAE,+BAA+B,EAAC,EAAC;IAChF,UAAU,EAAE;QACR;YACI,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aAChyC;SACJ;KACJ;CACJ,CAAC;AAEF,IAAM,IAAI,GAAG;IACT,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAC,MAAM,EAAE,+BAA+B,EAAC,EAAC;IAChF,UAAU,EAAE;QACR;YACI,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aAC/F;SACJ;KACJ;CACJ,CAAC;AAEF,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAMvC,IAAI,WAAW,GAAG,IAAI,+BAAsB,CACpC,EAAE,EACF;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,IAAI,eAAK,CAAC;QACb,IAAI,EAAE,IAAI,cAAI,CAAC;YACX,KAAK,EAAE,MAAM;SAChB,CAAC;QACF,MAAM,EAAE,IAAI,gBAAM,CAAC;YACf,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC;SACX,CAAC;KACL,CAAC;CACL,CAAC,CAAC;AAEX,IAAI,YAAY,GAAG,IAAI,+BAAsB,CACrC,EAAE,EACF;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,IAAI,eAAK,CAAC;QACb,IAAI,EAAE,IAAI,cAAI,CAAC;YACX,KAAK,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,IAAI,gBAAM,CAAC;YACf,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC;SACX,CAAC;KACL,CAAC;CACL,CAAC,CAAC;AAEX,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAE/B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAEnC,mBAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,UAAC,CAAC,IAAM,OAAO,MAAM,CAAA,CAAA,CAAC,CAAC,CAAC;AAG9D,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AACpB,EAAE;AACF,wDAAwD;AACxD,EAAE;AACF,qBAAqB;AACrB,QAAQ;AACR,6CAA6C;AAC7C,2BAA2B;AAC3B,0BAA0B;AAC1B,2CAA2C;AAC3C,QAAQ;AACR,KAAK;AAEL,oEAAoE;AAEpE,2BAA2B","sourcesContent":["/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport quickMap from '../../olHelpers/quickMap';\r\nimport {LayerBaseVectorGeoJson} from '../../layers';\r\nimport {mapPopup} from '../../olHelpers/mapPopup';\r\nimport Style from 'ol/style/Style';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\n\r\n\r\n\r\nconst reg = {\r\n    \"type\": \"FeatureCollection\",\r\n    \"crs\": {\"type\": \"name\", \"properties\": {\"name\": \"urn:ogc:def:crs:OGC:1.3:CRS84\"}},\r\n    \"features\": [\r\n        {\r\n            \"type\": \"Feature\",\r\n            \"properties\": {},\r\n            \"geometry\": {\r\n                \"type\": \"Polygon\",\r\n                \"coordinates\": [[[-91.4232, 43.9834], [-91.3246, 43.9834], [-91.3465, 44.0162], [-91.3082, 44.0655], [-91.2205, 44.0546], [-91.1767, 44.0874], [-91.1493, 44.0819], [-90.9741, 44.071], [-90.9741, 44.071], [-90.9796, 44.1312], [-90.9084, 44.1586], [-90.4921, 44.1586], [-90.3114, 44.1531], [-90.3114, 44.2463], [-90.0813, 44.2463], [-89.9006, 44.2517], [-89.928, 44.197], [-89.9061, 44.1805], [-89.928, 44.1531], [-89.9718, 44.1696], [-90.0266, 44.071], [-89.9608, 43.9779], [-89.9499, 43.9231], [-89.9828, 43.9122], [-89.9608, 43.8629], [-89.8513, 43.7698], [-89.7856, 43.6383], [-89.5994, 43.6438], [-89.2434, 43.6438], [-89.0079, 43.6328], [-88.8874, 43.6328], [-88.3999, 43.6328], [-88.3999, 43.5452], [-88.4163, 43.1947], [-88.5368, 43.1947], [-88.5423, 42.8442], [-88.5478, 42.8442], [-88.7778, 42.8442], [-88.7778, 42.4936], [-88.9421, 42.4936], [-89.3639, 42.4991], [-89.4022, 42.4991], [-89.8404, 42.5046], [-89.928, 42.5046], [-90.4264, 42.5046], [-90.64, 42.5101], [-90.7112, 42.636], [-90.8974, 42.6744], [-91.0672, 42.7511], [-91.1548, 42.9866], [-91.1767, 43.0797], [-91.1767, 43.1344], [-91.0562, 43.2549], [-91.1055, 43.3152], [-91.2041, 43.3535], [-91.2041, 43.4247], [-91.2315, 43.4576], [-91.2151, 43.5014], [-91.2698, 43.6164], [-91.2589, 43.7259], [-91.2424, 43.7752], [-91.2863, 43.8464]]]\r\n            }\r\n        }\r\n    ]\r\n};\r\n\r\nconst reg2 = {\r\n    \"type\": \"FeatureCollection\",\r\n    \"crs\": {\"type\": \"name\", \"properties\": {\"name\": \"urn:ogc:def:crs:OGC:1.3:CRS84\"}},\r\n    \"features\": [\r\n        {\r\n            \"type\": \"Feature\",\r\n            \"properties\": {},\r\n            \"geometry\": {\r\n                \"type\": \"Polygon\",\r\n                \"coordinates\": [[[-93.0, 45.0], [-94.0, 45.0], [-94.0, 46.0], [-93.0, 46.0], [-93.0, 45.0]]]\r\n            }\r\n        }\r\n    ]\r\n};\r\n\r\nlet map = quickMap({addGeocode: true});\r\n\r\n\r\n\r\n\r\n\r\nlet regionLayer = new LayerBaseVectorGeoJson(\r\n        '',\r\n        {\r\n            minZoom: 6,\r\n            maxZoom: 12,\r\n            name: 'WisDOT Regions',\r\n            style: new Style({\r\n                fill: new Fill({\r\n                    color: 'blue'\r\n                }),\r\n                stroke: new Stroke({\r\n                    color: 'yellow',\r\n                    width: 5\r\n                })\r\n            })\r\n        });\r\n\r\nlet regionLayer2 = new LayerBaseVectorGeoJson(\r\n        '',\r\n        {\r\n            minZoom: 6,\r\n            maxZoom: 12,\r\n            name: 'WisDOT Regions',\r\n            style: new Style({\r\n                fill: new Fill({\r\n                    color: 'red'\r\n                }),\r\n                stroke: new Stroke({\r\n                    color: 'yellow',\r\n                    width: 5\r\n                })\r\n            })\r\n        });\r\n\r\nregionLayer.addFeatures(reg);\r\nregionLayer2.addFeatures(reg2);\r\n\r\nmap.addLayer(regionLayer.olLayer);\r\nmap.addLayer(regionLayer2.olLayer);\r\n\r\nmapPopup.addVectorPopup(regionLayer2, (p) => {return 'cats'});\r\n\r\n\r\nwindow['map'] = map;\r\n//\r\n// let itsLayerCollection = new ItsLayerCollection(map);\r\n//\r\n// let layerArray = [\r\n//     {\r\n//         groupName: 'ITS Inventory Layers',\r\n//         collapse: false,\r\n//         addCheck: true,\r\n//         items: itsLayerCollection.layers\r\n//     }\r\n// ];\r\n\r\n// let legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n// console.log('it works');\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../../src/_tests/demos/mapPopup.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,uDAAgD;AAChD,yCAAoD;AACpD,uDAAkD;AAClD,0CAAmC;AACnC,4CAAqC;AACrC,wCAAiC;AAIjC,MAAM,GAAG,GAAG;IACR,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAC,MAAM,EAAE,+BAA+B,EAAC,EAAC;IAChF,UAAU,EAAE;QACR;YACI,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aAChyC;SACJ;KACJ;CACJ,CAAC;AAEF,MAAM,IAAI,GAAG;IACT,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,EAAC,MAAM,EAAE,+BAA+B,EAAC,EAAC;IAChF,UAAU,EAAE;QACR;YACI,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aAC/F;SACJ;KACJ;CACJ,CAAC;AAEF,IAAI,GAAG,GAAG,kBAAQ,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AAMvC,IAAI,WAAW,GAAG,IAAI,+BAAsB,CACpC,EAAE,EACF;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,IAAI,eAAK,CAAC;QACb,IAAI,EAAE,IAAI,cAAI,CAAC;YACX,KAAK,EAAE,MAAM;SAChB,CAAC;QACF,MAAM,EAAE,IAAI,gBAAM,CAAC;YACf,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC;SACX,CAAC;KACL,CAAC;CACL,CAAC,CAAC;AAEX,IAAI,YAAY,GAAG,IAAI,+BAAsB,CACrC,EAAE,EACF;IACI,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,IAAI,eAAK,CAAC;QACb,IAAI,EAAE,IAAI,cAAI,CAAC;YACX,KAAK,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,IAAI,gBAAM,CAAC;YACf,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,CAAC;SACX,CAAC;KACL,CAAC;CACL,CAAC,CAAC;AAEX,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAE/B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAEnC,mBAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,GAAE,OAAO,MAAM,CAAA,CAAA,CAAC,CAAC,CAAC;AAG9D,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AACpB,EAAE;AACF,wDAAwD;AACxD,EAAE;AACF,qBAAqB;AACrB,QAAQ;AACR,6CAA6C;AAC7C,2BAA2B;AAC3B,0BAA0B;AAC1B,2CAA2C;AAC3C,QAAQ;AACR,KAAK;AAEL,oEAAoE;AAEpE,2BAA2B","sourcesContent":["/**\r\n * Created by gavorhes on 12/18/2015.\r\n */\r\n\r\n\r\nimport quickMap from '../../olHelpers/quickMap';\r\nimport {LayerBaseVectorGeoJson} from '../../layers';\r\nimport {mapPopup} from '../../olHelpers/mapPopup';\r\nimport Style from 'ol/style/Style';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\n\r\n\r\n\r\nconst reg = {\r\n    \"type\": \"FeatureCollection\",\r\n    \"crs\": {\"type\": \"name\", \"properties\": {\"name\": \"urn:ogc:def:crs:OGC:1.3:CRS84\"}},\r\n    \"features\": [\r\n        {\r\n            \"type\": \"Feature\",\r\n            \"properties\": {},\r\n            \"geometry\": {\r\n                \"type\": \"Polygon\",\r\n                \"coordinates\": [[[-91.4232, 43.9834], [-91.3246, 43.9834], [-91.3465, 44.0162], [-91.3082, 44.0655], [-91.2205, 44.0546], [-91.1767, 44.0874], [-91.1493, 44.0819], [-90.9741, 44.071], [-90.9741, 44.071], [-90.9796, 44.1312], [-90.9084, 44.1586], [-90.4921, 44.1586], [-90.3114, 44.1531], [-90.3114, 44.2463], [-90.0813, 44.2463], [-89.9006, 44.2517], [-89.928, 44.197], [-89.9061, 44.1805], [-89.928, 44.1531], [-89.9718, 44.1696], [-90.0266, 44.071], [-89.9608, 43.9779], [-89.9499, 43.9231], [-89.9828, 43.9122], [-89.9608, 43.8629], [-89.8513, 43.7698], [-89.7856, 43.6383], [-89.5994, 43.6438], [-89.2434, 43.6438], [-89.0079, 43.6328], [-88.8874, 43.6328], [-88.3999, 43.6328], [-88.3999, 43.5452], [-88.4163, 43.1947], [-88.5368, 43.1947], [-88.5423, 42.8442], [-88.5478, 42.8442], [-88.7778, 42.8442], [-88.7778, 42.4936], [-88.9421, 42.4936], [-89.3639, 42.4991], [-89.4022, 42.4991], [-89.8404, 42.5046], [-89.928, 42.5046], [-90.4264, 42.5046], [-90.64, 42.5101], [-90.7112, 42.636], [-90.8974, 42.6744], [-91.0672, 42.7511], [-91.1548, 42.9866], [-91.1767, 43.0797], [-91.1767, 43.1344], [-91.0562, 43.2549], [-91.1055, 43.3152], [-91.2041, 43.3535], [-91.2041, 43.4247], [-91.2315, 43.4576], [-91.2151, 43.5014], [-91.2698, 43.6164], [-91.2589, 43.7259], [-91.2424, 43.7752], [-91.2863, 43.8464]]]\r\n            }\r\n        }\r\n    ]\r\n};\r\n\r\nconst reg2 = {\r\n    \"type\": \"FeatureCollection\",\r\n    \"crs\": {\"type\": \"name\", \"properties\": {\"name\": \"urn:ogc:def:crs:OGC:1.3:CRS84\"}},\r\n    \"features\": [\r\n        {\r\n            \"type\": \"Feature\",\r\n            \"properties\": {},\r\n            \"geometry\": {\r\n                \"type\": \"Polygon\",\r\n                \"coordinates\": [[[-93.0, 45.0], [-94.0, 45.0], [-94.0, 46.0], [-93.0, 46.0], [-93.0, 45.0]]]\r\n            }\r\n        }\r\n    ]\r\n};\r\n\r\nlet map = quickMap({addGeocode: true});\r\n\r\n\r\n\r\n\r\n\r\nlet regionLayer = new LayerBaseVectorGeoJson(\r\n        '',\r\n        {\r\n            minZoom: 6,\r\n            maxZoom: 12,\r\n            name: 'WisDOT Regions',\r\n            style: new Style({\r\n                fill: new Fill({\r\n                    color: 'blue'\r\n                }),\r\n                stroke: new Stroke({\r\n                    color: 'yellow',\r\n                    width: 5\r\n                })\r\n            })\r\n        });\r\n\r\nlet regionLayer2 = new LayerBaseVectorGeoJson(\r\n        '',\r\n        {\r\n            minZoom: 6,\r\n            maxZoom: 12,\r\n            name: 'WisDOT Regions',\r\n            style: new Style({\r\n                fill: new Fill({\r\n                    color: 'red'\r\n                }),\r\n                stroke: new Stroke({\r\n                    color: 'yellow',\r\n                    width: 5\r\n                })\r\n            })\r\n        });\r\n\r\nregionLayer.addFeatures(reg);\r\nregionLayer2.addFeatures(reg2);\r\n\r\nmap.addLayer(regionLayer.olLayer);\r\nmap.addLayer(regionLayer2.olLayer);\r\n\r\nmapPopup.addVectorPopup(regionLayer2, (p) => {return 'cats'});\r\n\r\n\r\nwindow['map'] = map;\r\n//\r\n// let itsLayerCollection = new ItsLayerCollection(map);\r\n//\r\n// let layerArray = [\r\n//     {\r\n//         groupName: 'ITS Inventory Layers',\r\n//         collapse: false,\r\n//         addCheck: true,\r\n//         items: itsLayerCollection.layers\r\n//     }\r\n// ];\r\n\r\n// let legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n// console.log('it works');\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/my_little_test.js b/dist/_tests/demos/my_little_test.js
index f7c644e..8fc1512 100644
--- a/dist/_tests/demos/my_little_test.js
+++ b/dist/_tests/demos/my_little_test.js
@@ -1,7 +1,7 @@
 "use strict";
 // let g = new
 Object.defineProperty(exports, "__esModule", { value: true });
-var media_control_1 = require("../../domUtil/media-control");
+const media_control_1 = require("../../domUtil/media-control");
 //
 //
 console.log('eat this fish');
@@ -12,8 +12,7 @@ console.log('eat this bird');
 //
 // console.log(olx);
 console.log('i am here5');
-function me(eat) {
-    if (eat === void 0) { eat = 1; }
+function me(eat = 1) {
     console.log(eat, 'one');
 }
 me(1);
diff --git a/dist/_tests/demos/my_little_test.js.map b/dist/_tests/demos/my_little_test.js.map
index b1564f2..9300366 100644
--- a/dist/_tests/demos/my_little_test.js.map
+++ b/dist/_tests/demos/my_little_test.js.map
@@ -1 +1 @@
-{"version":3,"file":"my_little_test.js","sourceRoot":"","sources":["../../../src/_tests/demos/my_little_test.ts"],"names":[],"mappings":";AAAA,cAAc;;AAKd,6DAAwD;AACxD,EAAE;AACF,EAAE;AAGF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AAGpB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAI1B,SAAS,EAAE,CAAE,GAAe;IAAf,oBAAA,EAAA,OAAe;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,EAAE,CAAC,CAAC,CAAC,CAAC;AAEN,IAAI,OAAO,GAAG,IAAI,4BAAY,CAAC,KAAK,CAAC,CAAC;AAEtC,EAAE;AACF,EAAE;AACF,oBAAoB;AACpB,EAAE;AACF,EAAE;AACF,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,uBAAuB;AACvB,EAAE","sourcesContent":["// let g = new\r\n\r\n\r\n\r\n\r\nimport {MediaControl} from '../../domUtil/media-control'\r\n//\r\n//\r\n\r\n\r\nconsole.log('eat this fish');\r\nconsole.log('eat this fish');\r\nconsole.log('eat this bird');\r\n\r\n//\r\n// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\n\r\n\r\nconsole.log('i am here5');\r\n\r\n\r\n\r\nfunction me (eat: number = 1){\r\n    console.log(eat, 'one');\r\n}\r\n\r\nme(1);\r\n\r\nvar control = new MediaControl('map');\r\n\r\n//\r\n//\r\n// console.log(ol3);\r\n//\r\n//\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log('here');\r\n//\r\n"]}
\ No newline at end of file
+{"version":3,"file":"my_little_test.js","sourceRoot":"","sources":["../../../src/_tests/demos/my_little_test.ts"],"names":[],"mappings":";AAAA,cAAc;;AAKd,+DAAwD;AACxD,EAAE;AACF,EAAE;AAGF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE7B,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AAGpB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAI1B,SAAS,EAAE,CAAE,MAAc,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,EAAE,CAAC,CAAC,CAAC,CAAC;AAEN,IAAI,OAAO,GAAG,IAAI,4BAAY,CAAC,KAAK,CAAC,CAAC;AAEtC,EAAE;AACF,EAAE;AACF,oBAAoB;AACpB,EAAE;AACF,EAAE;AACF,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,uBAAuB;AACvB,EAAE","sourcesContent":["// let g = new\r\n\r\n\r\n\r\n\r\nimport {MediaControl} from '../../domUtil/media-control'\r\n//\r\n//\r\n\r\n\r\nconsole.log('eat this fish');\r\nconsole.log('eat this fish');\r\nconsole.log('eat this bird');\r\n\r\n//\r\n// let g = new ol3.source.Vector();\r\n//\r\n// console.log(olx);\r\n\r\n\r\nconsole.log('i am here5');\r\n\r\n\r\n\r\nfunction me (eat: number = 1){\r\n    console.log(eat, 'one');\r\n}\r\n\r\nme(1);\r\n\r\nvar control = new MediaControl('map');\r\n\r\n//\r\n//\r\n// console.log(ol3);\r\n//\r\n//\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log(definedAndNotNull(\"fish\"));\r\n// console.log('here');\r\n//\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/range_media.js b/dist/_tests/demos/range_media.js
index 2aa53b7..684cdcb 100644
--- a/dist/_tests/demos/range_media.js
+++ b/dist/_tests/demos/range_media.js
@@ -3,7 +3,7 @@
  * Created by gavorhes on 10/10/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var day_range_1 = require("../../domUtil/day-range");
-var $ = require("jquery");
-var dayRange = new day_range_1.DayRange($('#day-range'), 10);
+const day_range_1 = require("../../domUtil/day-range");
+const $ = require("jquery");
+let dayRange = new day_range_1.DayRange($('#day-range'), 10);
 //# sourceMappingURL=range_media.js.map
\ No newline at end of file
diff --git a/dist/_tests/demos/range_media.js.map b/dist/_tests/demos/range_media.js.map
index ded87fb..0b94757 100644
--- a/dist/_tests/demos/range_media.js.map
+++ b/dist/_tests/demos/range_media.js.map
@@ -1 +1 @@
-{"version":3,"file":"range_media.js","sourceRoot":"","sources":["../../../src/_tests/demos/range_media.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qDAAiD;AACjD,0BAA6B;AAE7B,IAAI,QAAQ,GAAG,IAAI,oBAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 10/10/2016.\r\n */\r\n\r\nimport {DayRange} from '../../domUtil/day-range';\r\nimport $ = require('jquery');\r\n\r\nlet dayRange = new DayRange($('#day-range'), 10);\r\n\r\n\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"range_media.js","sourceRoot":"","sources":["../../../src/_tests/demos/range_media.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uDAAiD;AACjD,4BAA6B;AAE7B,IAAI,QAAQ,GAAG,IAAI,oBAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 10/10/2016.\r\n */\r\n\r\nimport {DayRange} from '../../domUtil/day-range';\r\nimport $ = require('jquery');\r\n\r\nlet dayRange = new DayRange($('#day-range'), 10);\r\n\r\n\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/reacttst_connect.js b/dist/_tests/demos/reacttst_connect.js
index 387d04d..9153ca2 100644
--- a/dist/_tests/demos/reacttst_connect.js
+++ b/dist/_tests/demos/reacttst_connect.js
@@ -1,25 +1,25 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var react_redux_1 = require("react-redux");
-var DatePick_1 = require("../../reactComponents/DatePick");
-var DateRange_1 = require("../../reactComponents/DateRange");
-var actions = require("./reacttst_actions");
-exports.DatePickConnected = react_redux_1.connect(function (state) {
+const react_redux_1 = require("react-redux");
+const DatePick_1 = require("../../reactComponents/DatePick");
+const DateRange_1 = require("../../reactComponents/DateRange");
+const actions = require("./reacttst_actions");
+exports.DatePickConnected = react_redux_1.connect((state) => {
     return {
         label: 'Date Picker Connected',
-        change: function (v) {
+        change: (v) => {
             console.log(v);
         },
         val: state.oneDate
     };
-}, function (dispatch) {
+}, (dispatch) => {
     return {
-        change: function (v) {
+        change: (v) => {
             dispatch({ type: actions.SET_ONE_DATE, d: v });
         }
     };
 })(DatePick_1.DatePick);
-exports.DateRangeConnected = react_redux_1.connect(function (state) {
+exports.DateRangeConnected = react_redux_1.connect((state) => {
     return {
         maxRange: 10,
         start: state.twoDates.start,
@@ -27,9 +27,9 @@ exports.DateRangeConnected = react_redux_1.connect(function (state) {
         initialEnd: state.twoDates.end,
         npmrds: true
     };
-}, function (dispatch) {
+}, (dispatch) => {
     return {
-        callback: function (s, e, version) {
+        callback: (s, e, version) => {
             dispatch({ type: actions.SET_TWO_DATES, start: s, end: e, version: version });
         }
     };
diff --git a/dist/_tests/demos/reacttst_connect.js.map b/dist/_tests/demos/reacttst_connect.js.map
index 464670a..892a9d6 100644
--- a/dist/_tests/demos/reacttst_connect.js.map
+++ b/dist/_tests/demos/reacttst_connect.js.map
@@ -1 +1 @@
-{"version":3,"file":"reacttst_connect.js","sourceRoot":"","sources":["../../../src/_tests/demos/reacttst_connect.ts"],"names":[],"mappings":";;AAAA,2CAAoC;AAEpC,2DAAwD;AACxD,6DAA0D;AAC1D,4CAA8C;AAGjC,QAAA,iBAAiB,GAAG,qBAAO,CACpC,UAAC,KAAa;IACV,OAAO;QACH,KAAK,EAAE,uBAAuB;QAC9B,MAAM,EAAE,UAAC,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,EAAE,KAAK,CAAC,OAAO;KACrB,CAAA;AACL,CAAC,EACD,UAAC,QAAQ;IACL,OAAO;QACH,MAAM,EAAE,UAAC,CAAC;YACN,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QACjD,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAC,mBAAQ,CAAC,CAAC;AAGC,QAAA,kBAAkB,GAAG,qBAAO,CACrC,UAAC,KAAa;IACV,OAAO;QACH,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK;QAC3B,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG;QACvB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG;QAC9B,MAAM,EAAE,IAAI;KACf,CAAA;AACL,CAAC,EACD,UAAC,QAAQ;IACL,OAAO;QACH,QAAQ,EAAE,UAAC,CAAO,EAAE,CAAO,EAAE,OAAe;YACxC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;QAChF,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAC,qBAAS,CAAC,CAAC","sourcesContent":["import {connect} from 'react-redux';\r\nimport {iState} from './reacttst_store';\r\nimport {DatePick} from '../../reactComponents/DatePick';\r\nimport {DateRange} from '../../reactComponents/DateRange';\r\nimport * as actions from './reacttst_actions';\r\n\r\n\r\nexport const DatePickConnected = connect(\r\n    (state: iState) => {\r\n        return {\r\n            label: 'Date Picker Connected',\r\n            change: (v) => {\r\n                console.log(v);\r\n            },\r\n            val: state.oneDate\r\n        }\r\n    },\r\n    (dispatch) => {\r\n        return {\r\n            change: (v) => {\r\n                dispatch({type: actions.SET_ONE_DATE, d: v});\r\n            }\r\n        }\r\n    }\r\n)(DatePick);\r\n\r\n\r\nexport const DateRangeConnected = connect(\r\n    (state: iState) => {\r\n        return {\r\n            maxRange: 10,\r\n            start: state.twoDates.start,\r\n            end: state.twoDates.end,\r\n            initialEnd: state.twoDates.end,\r\n            npmrds: true\r\n        }\r\n    },\r\n    (dispatch) => {\r\n        return {\r\n            callback: (s: Date, e: Date, version: number) => {\r\n                dispatch({type: actions.SET_TWO_DATES, start: s, end: e, version: version});\r\n            }\r\n        }\r\n    }\r\n)(DateRange);\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"reacttst_connect.js","sourceRoot":"","sources":["../../../src/_tests/demos/reacttst_connect.ts"],"names":[],"mappings":";;AAAA,6CAAoC;AAEpC,6DAAwD;AACxD,+DAA0D;AAC1D,8CAA8C;AAGjC,QAAA,iBAAiB,GAAG,qBAAO,CACpC,CAAC,KAAa,EAAE,EAAE;IACd,OAAO;QACH,KAAK,EAAE,uBAAuB;QAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,GAAG,EAAE,KAAK,CAAC,OAAO;KACrB,CAAA;AACL,CAAC,EACD,CAAC,QAAQ,EAAE,EAAE;IACT,OAAO;QACH,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACV,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QACjD,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAC,mBAAQ,CAAC,CAAC;AAGC,QAAA,kBAAkB,GAAG,qBAAO,CACrC,CAAC,KAAa,EAAE,EAAE;IACd,OAAO;QACH,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK;QAC3B,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG;QACvB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG;QAC9B,MAAM,EAAE,IAAI;KACf,CAAA;AACL,CAAC,EACD,CAAC,QAAQ,EAAE,EAAE;IACT,OAAO;QACH,QAAQ,EAAE,CAAC,CAAO,EAAE,CAAO,EAAE,OAAe,EAAE,EAAE;YAC5C,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;QAChF,CAAC;KACJ,CAAA;AACL,CAAC,CACJ,CAAC,qBAAS,CAAC,CAAC","sourcesContent":["import {connect} from 'react-redux';\r\nimport {iState} from './reacttst_store';\r\nimport {DatePick} from '../../reactComponents/DatePick';\r\nimport {DateRange} from '../../reactComponents/DateRange';\r\nimport * as actions from './reacttst_actions';\r\n\r\n\r\nexport const DatePickConnected = connect(\r\n    (state: iState) => {\r\n        return {\r\n            label: 'Date Picker Connected',\r\n            change: (v) => {\r\n                console.log(v);\r\n            },\r\n            val: state.oneDate\r\n        }\r\n    },\r\n    (dispatch) => {\r\n        return {\r\n            change: (v) => {\r\n                dispatch({type: actions.SET_ONE_DATE, d: v});\r\n            }\r\n        }\r\n    }\r\n)(DatePick);\r\n\r\n\r\nexport const DateRangeConnected = connect(\r\n    (state: iState) => {\r\n        return {\r\n            maxRange: 10,\r\n            start: state.twoDates.start,\r\n            end: state.twoDates.end,\r\n            initialEnd: state.twoDates.end,\r\n            npmrds: true\r\n        }\r\n    },\r\n    (dispatch) => {\r\n        return {\r\n            callback: (s: Date, e: Date, version: number) => {\r\n                dispatch({type: actions.SET_TWO_DATES, start: s, end: e, version: version});\r\n            }\r\n        }\r\n    }\r\n)(DateRange);\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/reacttst_store.js b/dist/_tests/demos/reacttst_store.js
index 368bdf8..ac64e63 100644
--- a/dist/_tests/demos/reacttst_store.js
+++ b/dist/_tests/demos/reacttst_store.js
@@ -1,9 +1,8 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var actions = require("./reacttst_actions");
-var Redux = require("redux");
-function oneDate(state, action) {
-    if (state === void 0) { state = new Date(); }
+const actions = require("./reacttst_actions");
+const Redux = require("redux");
+function oneDate(state = new Date(), action) {
     if (action.type == actions.SET_ONE_DATE) {
         return action.d;
     }
@@ -11,11 +10,10 @@ function oneDate(state, action) {
         return state;
     }
 }
-var start = new Date('12/31/2017');
-var end = new Date('12/31/2017');
+let start = new Date('12/31/2017');
+let end = new Date('12/31/2017');
 start.setDate(start.getDate() - 10);
-function twoDates(state, action) {
-    if (state === void 0) { state = { start: start, end: end, version: 2 }; }
+function twoDates(state = { start: start, end: end, version: 2 }, action) {
     if (action.type == actions.SET_TWO_DATES) {
         return {
             start: action.start,
@@ -27,7 +25,7 @@ function twoDates(state, action) {
         return state;
     }
 }
-exports.theStore = Redux.createStore(Redux.combineReducers({ oneDate: oneDate, twoDates: twoDates }));
+exports.theStore = Redux.createStore(Redux.combineReducers({ oneDate, twoDates }));
 function getState() {
     return exports.theStore.getState();
 }
diff --git a/dist/_tests/demos/reacttst_store.js.map b/dist/_tests/demos/reacttst_store.js.map
index 6090eaa..5922e93 100644
--- a/dist/_tests/demos/reacttst_store.js.map
+++ b/dist/_tests/demos/reacttst_store.js.map
@@ -1 +1 @@
-{"version":3,"file":"reacttst_store.js","sourceRoot":"","sources":["../../../src/_tests/demos/reacttst_store.ts"],"names":[],"mappings":";;AAAA,4CAA8C;AAC9C,6BAAgC;AAGhC,SAAS,OAAO,CAAC,KAAkB,EAAE,MAA+B;IAAnD,sBAAA,EAAA,YAAY,IAAI,EAAE;IAC/B,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC;KACnB;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAED,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAEpC,SAAS,QAAQ,CAAC,KAA4C,EAAE,MAA+D;IAA7G,sBAAA,EAAA,UAAS,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAC;IAC1D,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,EAAC;QACrC,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAA;KACJ;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAIY,QAAA,QAAQ,GAAG,KAAK,CAAC,WAAW,CACrC,KAAK,CAAC,eAAe,CAAC,EAAC,OAAO,SAAA,EAAE,QAAQ,UAAA,EAAC,CAAC,CAC7C,CAAC;AASF,SAAgB,QAAQ;IACpB,OAAO,gBAAQ,CAAC,QAAQ,EAAY,CAAC;AACzC,CAAC;AAFD,4BAEC;AAED,kBAAe,gBAAQ,CAAC","sourcesContent":["import * as actions from './reacttst_actions';\r\nimport Redux = require('redux');\r\n\r\n\r\nfunction oneDate(state = new Date(), action: {type: string, d: Date}) {\r\n    if (action.type == actions.SET_ONE_DATE) {\r\n        return action.d;\r\n    } else {\r\n        return state;\r\n    }\r\n}\r\n\r\nlet start = new Date('12/31/2017');\r\nlet end = new Date('12/31/2017');\r\nstart.setDate(start.getDate() - 10);\r\n\r\nfunction twoDates(state = {start: start, end: end, version: 2}, action: {type: string, start: Date, end: Date, version: number}){\r\n    if (action.type == actions.SET_TWO_DATES){\r\n        return {\r\n            start: action.start,\r\n            end: action.end,\r\n            version: action.version\r\n        }\r\n    } else {\r\n        return state;\r\n    }\r\n}\r\n\r\n\r\n\r\nexport const theStore = Redux.createStore(\r\n    Redux.combineReducers({oneDate, twoDates})\r\n);\r\n\r\n\r\nexport interface iState {\r\n    oneDate: Date;\r\n    twoDates: {start: Date, end: Date, version: number}\r\n}\r\n\r\n\r\nexport function getState(): iState{\r\n    return theStore.getState() as iState;\r\n}\r\n\r\nexport default theStore;\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"reacttst_store.js","sourceRoot":"","sources":["../../../src/_tests/demos/reacttst_store.ts"],"names":[],"mappings":";;AAAA,8CAA8C;AAC9C,+BAAgC;AAGhC,SAAS,OAAO,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,EAAE,MAA+B;IAChE,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC;KACnB;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAED,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAEpC,SAAS,QAAQ,CAAC,KAAK,GAAG,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAC,EAAE,MAA+D;IAC3H,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,aAAa,EAAC;QACrC,OAAO;YACH,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAA;KACJ;SAAM;QACH,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAIY,QAAA,QAAQ,GAAG,KAAK,CAAC,WAAW,CACrC,KAAK,CAAC,eAAe,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC,CAC7C,CAAC;AASF,SAAgB,QAAQ;IACpB,OAAO,gBAAQ,CAAC,QAAQ,EAAY,CAAC;AACzC,CAAC;AAFD,4BAEC;AAED,kBAAe,gBAAQ,CAAC","sourcesContent":["import * as actions from './reacttst_actions';\r\nimport Redux = require('redux');\r\n\r\n\r\nfunction oneDate(state = new Date(), action: {type: string, d: Date}) {\r\n    if (action.type == actions.SET_ONE_DATE) {\r\n        return action.d;\r\n    } else {\r\n        return state;\r\n    }\r\n}\r\n\r\nlet start = new Date('12/31/2017');\r\nlet end = new Date('12/31/2017');\r\nstart.setDate(start.getDate() - 10);\r\n\r\nfunction twoDates(state = {start: start, end: end, version: 2}, action: {type: string, start: Date, end: Date, version: number}){\r\n    if (action.type == actions.SET_TWO_DATES){\r\n        return {\r\n            start: action.start,\r\n            end: action.end,\r\n            version: action.version\r\n        }\r\n    } else {\r\n        return state;\r\n    }\r\n}\r\n\r\n\r\n\r\nexport const theStore = Redux.createStore(\r\n    Redux.combineReducers({oneDate, twoDates})\r\n);\r\n\r\n\r\nexport interface iState {\r\n    oneDate: Date;\r\n    twoDates: {start: Date, end: Date, version: number}\r\n}\r\n\r\n\r\nexport function getState(): iState{\r\n    return theStore.getState() as iState;\r\n}\r\n\r\nexport default theStore;\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/simple_map.js b/dist/_tests/demos/simple_map.js
index 4f56549..f767e8f 100644
--- a/dist/_tests/demos/simple_map.js
+++ b/dist/_tests/demos/simple_map.js
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 9/23/2016.
  */
-var quickMap_1 = require("../../olHelpers/quickMap");
-var LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
-var LayerLegend_1 = require("../../collections/LayerLegend");
-var map = quickMap_1.quickMap();
-var wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');
-var sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true });
+const quickMap_1 = require("../../olHelpers/quickMap");
+const LayerEsriMapServer_1 = require("../../layers/LayerEsriMapServer");
+const LayerLegend_1 = require("../../collections/LayerLegend");
+let map = quickMap_1.quickMap();
+let wisDotRegions = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');
+let sixYearPlan = new LayerEsriMapServer_1.LayerEsriMapServer('https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', { name: 'Six Year Plan', legendCollapse: true });
 map.addLayer(wisDotRegions.olLayer);
 map.addLayer(sixYearPlan.olLayer);
-var layerArray = [
+let layerArray = [
     wisDotRegions,
     sixYearPlan
     // tipConfig.tipSegmentLayer,
@@ -23,5 +23,5 @@ var layerArray = [
     //     items: tipConfig.itsLayerCollection.layers
     // }
 ];
-var legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
+let legend = new LayerLegend_1.default(layerArray, 'legend-container', {});
 //# sourceMappingURL=simple_map.js.map
\ No newline at end of file
diff --git a/dist/_tests/demos/simple_map.js.map b/dist/_tests/demos/simple_map.js.map
index 8b63ff5..b42ed6f 100644
--- a/dist/_tests/demos/simple_map.js.map
+++ b/dist/_tests/demos/simple_map.js.map
@@ -1 +1 @@
-{"version":3,"file":"simple_map.js","sourceRoot":"","sources":["../../../src/_tests/demos/simple_map.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,qDAAkD;AAClD,sEAAmE;AACnE,6DAAwD;AAGxD,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAErB,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,+GAA+G,CAAC,CAAC;AAErH,IAAI,WAAW,GAAG,IAAI,uCAAkB,CACpC,uGAAuG,EAAE,EAAC,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,EAAC,CAAC,CAAC;AAE5J,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAElC,IAAI,UAAU,GAAG;IACb,aAAa;IACb,WAAW;IACX,6BAA6B;IAC7B,iCAAiC;IACjC,IAAI;IACJ,yCAAyC;IACzC,sBAAsB;IACtB,uBAAuB;IACvB,iDAAiD;IACjD,IAAI;CACP,CAAC;AAEF,IAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../../collections/LayerLegend';\r\n\r\n\r\nlet map = quickMap();\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\n\r\nlet sixYearPlan = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', {name: 'Six Year Plan', legendCollapse: true});\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\n\r\nlet layerArray = [\r\n    wisDotRegions,\r\n    sixYearPlan\r\n    // tipConfig.tipSegmentLayer,\r\n    // tipConfig.metamanagerSegments,\r\n    // {\r\n    //     groupName: 'ITS Inventory Layers',\r\n    //     collapse: true,\r\n    //     addCheck: false,\r\n    //     items: tipConfig.itsLayerCollection.layers\r\n    // }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"simple_map.js","sourceRoot":"","sources":["../../../src/_tests/demos/simple_map.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,uDAAkD;AAClD,wEAAmE;AACnE,+DAAwD;AAGxD,IAAI,GAAG,GAAG,mBAAQ,EAAE,CAAC;AAErB,IAAI,aAAa,GAAG,IAAI,uCAAkB,CACtC,+GAA+G,CAAC,CAAC;AAErH,IAAI,WAAW,GAAG,IAAI,uCAAkB,CACpC,uGAAuG,EAAE,EAAC,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,EAAC,CAAC,CAAC;AAE5J,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAElC,IAAI,UAAU,GAAG;IACb,aAAa;IACb,WAAW;IACX,6BAA6B;IAC7B,iCAAiC;IACjC,IAAI;IACJ,yCAAyC;IACzC,sBAAsB;IACtB,uBAAuB;IACvB,iDAAiD;IACjD,IAAI;CACP,CAAC;AAEF,IAAI,MAAM,GAAG,IAAI,qBAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 9/23/2016.\r\n */\r\nimport {quickMap} from '../../olHelpers/quickMap';\r\nimport {LayerEsriMapServer} from \"../../layers/LayerEsriMapServer\";\r\nimport LayerLegend from '../../collections/LayerLegend';\r\n\r\n\r\nlet map = quickMap();\r\n\r\nlet wisDotRegions = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/Metamanager_regions/MapServer');\r\n\r\nlet sixYearPlan = new LayerEsriMapServer(\r\n    'https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/SixYearPlan/MapServer', {name: 'Six Year Plan', legendCollapse: true});\r\n\r\nmap.addLayer(wisDotRegions.olLayer);\r\nmap.addLayer(sixYearPlan.olLayer);\r\n\r\nlet layerArray = [\r\n    wisDotRegions,\r\n    sixYearPlan\r\n    // tipConfig.tipSegmentLayer,\r\n    // tipConfig.metamanagerSegments,\r\n    // {\r\n    //     groupName: 'ITS Inventory Layers',\r\n    //     collapse: true,\r\n    //     addCheck: false,\r\n    //     items: tipConfig.itsLayerCollection.layers\r\n    // }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/_tests/demos/slider-test.js b/dist/_tests/demos/slider-test.js
index 9f652e1..38a9e9c 100644
--- a/dist/_tests/demos/slider-test.js
+++ b/dist/_tests/demos/slider-test.js
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 6/22/2016.
  */
-var Sliders_1 = require("../../collections/Sliders");
-var $ = require("jquery");
+const Sliders_1 = require("../../collections/Sliders");
+const $ = require("jquery");
 require("jquery-ui");
 exports.tipConfig = {
     $loadingGif: $('#loading-gif'),
@@ -178,7 +178,7 @@ exports.tipConfig = {
     ]
 };
 exports.tipConfig.$presetSelector.append('<option value="0" disabled=>Custom</option>');
-var sliders = new Sliders_1.TipSliders(exports.tipConfig.slidersConfig, exports.tipConfig.presetConfig, 'slider-container', exports.tipConfig.$presetSelector, exports.tipConfig.$regionSelector, exports.tipConfig.$regionSelector, function (chg) { console.log(chg); });
+let sliders = new Sliders_1.TipSliders(exports.tipConfig.slidersConfig, exports.tipConfig.presetConfig, 'slider-container', exports.tipConfig.$presetSelector, exports.tipConfig.$regionSelector, exports.tipConfig.$regionSelector, (chg) => { console.log(chg); });
 // sliders.changedCallback = (chg) => {console.log(chg)};
 window['glob'] = sliders;
 window['hat'] = sliders;
diff --git a/dist/_tests/demos/slider-test.js.map b/dist/_tests/demos/slider-test.js.map
index 8c58609..f896c1b 100644
--- a/dist/_tests/demos/slider-test.js.map
+++ b/dist/_tests/demos/slider-test.js.map
@@ -1 +1 @@
-{"version":3,"file":"slider-test.js","sourceRoot":"","sources":["../../../src/_tests/demos/slider-test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../../collections/Sliders';\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nimport 'jquery-ui';\r\n\r\n\r\n\r\nexport interface ITipConfig{\r\n    slidersConfig: Array<TipSliderConfig>;\r\n    presetConfig: Array<TipPresetConfig>;\r\n    tipSegmentLayerMinZoom: number;\r\n    sliders: TipSliders;\r\n    _map: Map;\r\n    $loadingGif: JQuery;\r\n    $presetSelector: JQuery;\r\n    $regionSelector: JQuery;\r\n    $versionSelector: JQuery;\r\n    itsLayerCollection: any;\r\n    tipSegmentLayer: any;\r\n    metamanagerSegments: any;\r\n}\r\n\r\nexport const tipConfig = {\r\n    $loadingGif: $('#loading-gif'),\r\n    $presetSelector: $('#preset-selector'),\r\n    $regionSelector: $('#region-selector'),\r\n    $versionSelector: $('#version-selector'),\r\n    tipSegmentLayerMinZoom: 10,\r\n    slidersConfig: [\r\n            {\r\n                label: 'AADT',\r\n                yearOptions: [\r\n                    {label: '1', column: 'aadtyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'AADT Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'aadtyr_5'},\r\n                    {label: '10', column: 'aadtyr_10'},\r\n                    {label: '15', column: 'aadtyr_15'},\r\n                    {label: '20', column: 'aadtyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Growth',\r\n                yearOptions: [\r\n                    {label: '5', column: 'growth_5'},\r\n                    {label: '10', column: 'growth_10'},\r\n                    {label: '15', column: 'growth_15'},\r\n                    {label: '20', column: 'growth_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Truck',\r\n                yearOptions: [\r\n                    {label: '1', column: 'trkdyr_1'},\r\n                    {label: '20', column: 'trkdyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS',\r\n                yearOptions: [\r\n                    {label: '1', column: 'losyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'losyr_5'},\r\n                    {label: '10', column: 'losyr_10'},\r\n                    {label: '15', column: 'losyr_15'},\r\n                    {label: '20', column: 'losyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Crash Rate',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_rate'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Severity',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_severity'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Weather',\r\n                yearOptions: [\r\n                    {label: 1, column: 'weather'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Event',\r\n                yearOptions: [\r\n                    {label: 1, column: 'event'}\r\n                ]\r\n            }\r\n        ] as Array<TipSliderConfig>,\r\n    presetConfig: [\r\n            {\r\n                label: 'Default TIP',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 10.0},\r\n                    {column: 'aadtyr_20', value: 7.0},\r\n                    {column: 'growth_20', value: 7.0},\r\n                    {column: 'trkdyr_1', value: 4.0},\r\n                    {column: 'losyr_1', value: 12.0},\r\n                    {column: 'losyr_20', value: 12.0},\r\n                    {column: 'crash_rate', value: 15.0},\r\n                    {column: 'crash_severity', value: 13.0},\r\n                    {column: 'weather', value: 9.0},\r\n                    {column: 'event', value: 11.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Safety',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 40.0},\r\n                    {column: 'crash_severity', value: 40.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Present',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 25.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 25.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Future',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 0.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 25.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 25.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Service',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 30.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 10.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 30.0},\r\n                    {column: 'losyr_20', value: 30.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Freight Performance',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 60.0},\r\n                    {column: 'losyr_1', value: 20.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            }\r\n        ] as Array<TipPresetConfig>\r\n\r\n} as ITipConfig;\r\n\r\ntipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\n\r\nlet sliders = new TipSliders(tipConfig.slidersConfig, tipConfig.presetConfig, 'slider-container',\r\n    tipConfig.$presetSelector, tipConfig.$regionSelector, tipConfig.$regionSelector, (chg) => {console.log(chg)});\r\n\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\n\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"slider-test.js","sourceRoot":"","sources":["../../../src/_tests/demos/slider-test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 6/22/2016.\r\n */\r\nimport {TipSliders, TipPresetConfig, TipSliderConfig} from '../../collections/Sliders';\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nimport 'jquery-ui';\r\n\r\n\r\n\r\nexport interface ITipConfig{\r\n    slidersConfig: Array<TipSliderConfig>;\r\n    presetConfig: Array<TipPresetConfig>;\r\n    tipSegmentLayerMinZoom: number;\r\n    sliders: TipSliders;\r\n    _map: Map;\r\n    $loadingGif: JQuery;\r\n    $presetSelector: JQuery;\r\n    $regionSelector: JQuery;\r\n    $versionSelector: JQuery;\r\n    itsLayerCollection: any;\r\n    tipSegmentLayer: any;\r\n    metamanagerSegments: any;\r\n}\r\n\r\nexport const tipConfig = {\r\n    $loadingGif: $('#loading-gif'),\r\n    $presetSelector: $('#preset-selector'),\r\n    $regionSelector: $('#region-selector'),\r\n    $versionSelector: $('#version-selector'),\r\n    tipSegmentLayerMinZoom: 10,\r\n    slidersConfig: [\r\n            {\r\n                label: 'AADT',\r\n                yearOptions: [\r\n                    {label: '1', column: 'aadtyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'AADT Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'aadtyr_5'},\r\n                    {label: '10', column: 'aadtyr_10'},\r\n                    {label: '15', column: 'aadtyr_15'},\r\n                    {label: '20', column: 'aadtyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Growth',\r\n                yearOptions: [\r\n                    {label: '5', column: 'growth_5'},\r\n                    {label: '10', column: 'growth_10'},\r\n                    {label: '15', column: 'growth_15'},\r\n                    {label: '20', column: 'growth_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Truck',\r\n                yearOptions: [\r\n                    {label: '1', column: 'trkdyr_1'},\r\n                    {label: '20', column: 'trkdyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS',\r\n                yearOptions: [\r\n                    {label: '1', column: 'losyr_1'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'LOS Future',\r\n                yearOptions: [\r\n                    {label: '5', column: 'losyr_5'},\r\n                    {label: '10', column: 'losyr_10'},\r\n                    {label: '15', column: 'losyr_15'},\r\n                    {label: '20', column: 'losyr_20'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Crash Rate',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_rate'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Severity',\r\n                yearOptions: [\r\n                    {label: 1, column: 'crash_severity'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Weather',\r\n                yearOptions: [\r\n                    {label: 1, column: 'weather'}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Event',\r\n                yearOptions: [\r\n                    {label: 1, column: 'event'}\r\n                ]\r\n            }\r\n        ] as Array<TipSliderConfig>,\r\n    presetConfig: [\r\n            {\r\n                label: 'Default TIP',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 10.0},\r\n                    {column: 'aadtyr_20', value: 7.0},\r\n                    {column: 'growth_20', value: 7.0},\r\n                    {column: 'trkdyr_1', value: 4.0},\r\n                    {column: 'losyr_1', value: 12.0},\r\n                    {column: 'losyr_20', value: 12.0},\r\n                    {column: 'crash_rate', value: 15.0},\r\n                    {column: 'crash_severity', value: 13.0},\r\n                    {column: 'weather', value: 9.0},\r\n                    {column: 'event', value: 11.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Safety',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 40.0},\r\n                    {column: 'crash_severity', value: 40.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Present',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 25.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 25.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Mobility Future',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 0.0},\r\n                    {column: 'aadtyr_20', value: 25.0},\r\n                    {column: 'growth_20', value: 25.0},\r\n                    {column: 'trkdyr_1', value: 25.0},\r\n                    {column: 'losyr_1', value: 0.0},\r\n                    {column: 'losyr_20', value: 25.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Service',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 30.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 10.0},\r\n                    {column: 'trkdyr_1', value: 0.0},\r\n                    {column: 'losyr_1', value: 30.0},\r\n                    {column: 'losyr_20', value: 30.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            },\r\n            {\r\n                label: 'Freight Performance',\r\n                presets: [\r\n                    {column: 'aadtyr_1', value: 20.0},\r\n                    {column: 'aadtyr_20', value: 0.0},\r\n                    {column: 'growth_20', value: 0.0},\r\n                    {column: 'trkdyr_1', value: 60.0},\r\n                    {column: 'losyr_1', value: 20.0},\r\n                    {column: 'losyr_20', value: 0.0},\r\n                    {column: 'crash_rate', value: 0.0},\r\n                    {column: 'crash_severity', value: 0.0},\r\n                    {column: 'weather', value: 0.0},\r\n                    {column: 'event', value: 0.0}\r\n                ]\r\n            }\r\n        ] as Array<TipPresetConfig>\r\n\r\n} as ITipConfig;\r\n\r\ntipConfig.$presetSelector.append('<option value=\"0\" disabled=>Custom</option>');\r\n\r\nlet sliders = new TipSliders(tipConfig.slidersConfig, tipConfig.presetConfig, 'slider-container',\r\n    tipConfig.$presetSelector, tipConfig.$regionSelector, tipConfig.$regionSelector, (chg) => {console.log(chg)});\r\n\r\n// sliders.changedCallback = (chg) => {console.log(chg)};\r\n\r\nwindow['glob'] = sliders;\r\nwindow['hat'] = sliders;\r\nwindow['bird'] = sliders;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/api/_npmrdsEmpty.js b/dist/api/_npmrdsEmpty.js
index 43779e4..b1dbdeb 100644
--- a/dist/api/_npmrdsEmpty.js
+++ b/dist/api/_npmrdsEmpty.js
@@ -3,7 +3,7 @@
  * Created by glenn on 6/13/2017.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var emptyGeojson = {
+let emptyGeojson = {
     crs: {
         properties: { name: "urn:ogc:def:crs:OGC:1.3:CRS84" },
         type: 'name'
diff --git a/dist/api/_npmrdsInterfaces.js b/dist/api/_npmrdsInterfaces.js
index 5d5739d..f17a28c 100644
--- a/dist/api/_npmrdsInterfaces.js
+++ b/dist/api/_npmrdsInterfaces.js
@@ -3,7 +3,7 @@
  * Created by glenn on 6/13/2017.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var emptyGeojson = {
+let emptyGeojson = {
     crs: {
         properties: { name: "urn:ogc:def:crs:OGC:1.3:CRS84" },
         type: 'name'
diff --git a/dist/api/axios.js b/dist/api/axios.js
index 5ac6852..eaa1cf9 100644
--- a/dist/api/axios.js
+++ b/dist/api/axios.js
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by glenn on 7/6/2017.
  */
-var axios_1 = require("axios");
+const axios_1 = require("axios");
 // export const CancelToken = axios.CancelToken;
 /**
  *
@@ -12,26 +12,23 @@ var axios_1 = require("axios");
  * @param defaultVal
  * @returns
  */
-function getValue(obj, keyArr, defaultVal) {
-    if (defaultVal === void 0) { defaultVal = null; }
-    var k = keyArr.splice(0, 1)[0];
+function getValue(obj, keyArr, defaultVal = null) {
+    let k = keyArr.splice(0, 1)[0];
     if (keyArr.length == 0) {
         return typeof obj[k] === 'undefined' ? defaultVal : obj[k];
     }
     else {
         if (typeof obj[k] === 'undefined') {
-            throw "key error: " + k + " " + obj.toString();
+            throw `key error: ${k} ${obj.toString()}`;
         }
         else {
             return getValue(obj[k], keyArr);
         }
     }
 }
-function _axiosHelper(endpoint, callback, params, error, verb) {
-    if (params === void 0) { params = {}; }
-    if (error === void 0) { error = function () { }; }
-    var f;
-    var payload;
+function _axiosHelper(endpoint, callback, params = {}, error = () => { }, verb) {
+    let f;
+    let payload;
     switch (verb) {
         case 'get':
             f = axios_1.default.get;
@@ -52,10 +49,10 @@ function _axiosHelper(endpoint, callback, params, error, verb) {
         default:
             throw 'axios verb not found';
     }
-    f(endpoint, payload).then(function (response) {
-        var data = getValue(response, ['data'], null);
+    f(endpoint, payload).then((response) => {
+        let data = getValue(response, ['data'], null);
         callback(data);
-    }).catch(function (reason) {
+    }).catch((reason) => {
         error(reason);
     });
 }
@@ -67,9 +64,7 @@ function _axiosHelper(endpoint, callback, params, error, verb) {
  * @param {(d: Object) => any} error
  * @returns {any}
  */
-exports.get = function (endpoint, callback, params, error) {
-    if (params === void 0) { params = {}; }
-    if (error === void 0) { error = function () { }; }
+exports.get = (endpoint, callback, params = {}, error = () => { }) => {
     _axiosHelper(endpoint, callback, params, error, 'get');
 };
 /**
@@ -80,9 +75,7 @@ exports.get = function (endpoint, callback, params, error) {
  * @param {(d: Object) => any} error
  * @returns {any}
  */
-exports.post = function (endpoint, callback, params, error) {
-    if (params === void 0) { params = {}; }
-    if (error === void 0) { error = function () { }; }
+exports.post = (endpoint, callback, params = {}, error = () => { }) => {
     _axiosHelper(endpoint, callback, params, error, 'post');
 };
 /**
@@ -93,9 +86,7 @@ exports.post = function (endpoint, callback, params, error) {
  * @param {(d: Object) => any} error
  * @returns {any}
  */
-exports.delete_ = function (endpoint, callback, params, error) {
-    if (params === void 0) { params = {}; }
-    if (error === void 0) { error = function () { }; }
+exports.delete_ = (endpoint, callback, params = {}, error = () => { }) => {
     _axiosHelper(endpoint, callback, params, error, 'delete');
 };
 /**
@@ -106,9 +97,7 @@ exports.delete_ = function (endpoint, callback, params, error) {
  * @param {(d: Object) => any} error
  * @returns {any}
  */
-exports.put = function (endpoint, callback, params, error) {
-    if (params === void 0) { params = {}; }
-    if (error === void 0) { error = function () { }; }
+exports.put = (endpoint, callback, params = {}, error = () => { }) => {
     _axiosHelper(endpoint, callback, params, error, 'put');
 };
 //# sourceMappingURL=axios.js.map
\ No newline at end of file
diff --git a/dist/api/axios.js.map b/dist/api/axios.js.map
index bad154a..e9f2ac9 100644
--- a/dist/api/axios.js.map
+++ b/dist/api/axios.js.map
@@ -1 +1 @@
-{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/api/axios.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\nimport axios from 'axios';\r\n\r\n// export const CancelToken = axios.CancelToken;\r\n\r\n/**\r\n *\r\n * @param obj\r\n * @param keyArr\r\n * @param defaultVal\r\n * @returns\r\n */\r\nfunction getValue(obj: { [s: string]: any }, keyArr: string[], defaultVal: any = null): any {\r\n    let k = keyArr.splice(0, 1)[0];\r\n\r\n    if (keyArr.length == 0) {\r\n        return typeof obj[k] === 'undefined' ? defaultVal : obj[k];\r\n    } else {\r\n        if (typeof  obj[k] === 'undefined') {\r\n            throw `key error: ${k} ${obj.toString()}`;\r\n        } else {\r\n            return getValue(obj[k], keyArr);\r\n        }\r\n    }\r\n}\r\n\r\nfunction _axiosHelper(endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}, verb: string): any {\r\n\r\n    let f;\r\n\r\n    let payload;\r\n\r\n    switch (verb){\r\n        case 'get':\r\n            f = axios.get;\r\n            payload = {params: params};\r\n            break;\r\n        case 'post':\r\n            f = axios.post;\r\n            payload = params;\r\n            break;\r\n        case 'put':\r\n            f = axios.put;\r\n            payload = {params: params};\r\n            break;\r\n        case 'delete':\r\n            f = axios.delete;\r\n            payload = {params: params};\r\n            break;\r\n        default:\r\n            throw 'axios verb not found';\r\n\r\n    }\r\n\r\n    f(endpoint, payload).then((response: any) => {\r\n        let data = getValue(response, ['data'], null);\r\n        callback(data);\r\n    }).catch((reason: any) => {\r\n        error(reason);\r\n    });\r\n}\r\n\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const get = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'get');\r\n\r\n};\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const post = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'post');\r\n\r\n};\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const delete_ = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'delete');\r\n};\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const put = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'put');\r\n\r\n};\r\n"]}
\ No newline at end of file
+{"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/api/axios.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\nimport axios from 'axios';\r\n\r\n// export const CancelToken = axios.CancelToken;\r\n\r\n/**\r\n *\r\n * @param obj\r\n * @param keyArr\r\n * @param defaultVal\r\n * @returns\r\n */\r\nfunction getValue(obj: { [s: string]: any }, keyArr: string[], defaultVal: any = null): any {\r\n    let k = keyArr.splice(0, 1)[0];\r\n\r\n    if (keyArr.length == 0) {\r\n        return typeof obj[k] === 'undefined' ? defaultVal : obj[k];\r\n    } else {\r\n        if (typeof  obj[k] === 'undefined') {\r\n            throw `key error: ${k} ${obj.toString()}`;\r\n        } else {\r\n            return getValue(obj[k], keyArr);\r\n        }\r\n    }\r\n}\r\n\r\nfunction _axiosHelper(endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}, verb: string): any {\r\n\r\n    let f;\r\n\r\n    let payload;\r\n\r\n    switch (verb){\r\n        case 'get':\r\n            f = axios.get;\r\n            payload = {params: params};\r\n            break;\r\n        case 'post':\r\n            f = axios.post;\r\n            payload = params;\r\n            break;\r\n        case 'put':\r\n            f = axios.put;\r\n            payload = {params: params};\r\n            break;\r\n        case 'delete':\r\n            f = axios.delete;\r\n            payload = {params: params};\r\n            break;\r\n        default:\r\n            throw 'axios verb not found';\r\n\r\n    }\r\n\r\n    f(endpoint, payload).then((response: any) => {\r\n        let data = getValue(response, ['data'], null);\r\n        callback(data);\r\n    }).catch((reason: any) => {\r\n        error(reason);\r\n    });\r\n}\r\n\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const get = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'get');\r\n\r\n};\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const post = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'post');\r\n\r\n};\r\n\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const delete_ = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'delete');\r\n};\r\n\r\n/**\r\n *\r\n * @param {string} endpoint\r\n * @param {(d: Object) => any} callback\r\n * @param {Object} params\r\n * @param {(d: Object) => any} error\r\n * @returns {any}\r\n */\r\nexport const put = (endpoint: string,\r\n                          callback: (d: Object) => any,\r\n                          params: Object = {},\r\n                          error: (d?: Object) => any = () => {}): any => {\r\n\r\n    _axiosHelper(endpoint, callback, params, error, 'put');\r\n\r\n};\r\n"]}
\ No newline at end of file
diff --git a/dist/api/host.js b/dist/api/host.js
index 03c1970..bd5ab1b 100644
--- a/dist/api/host.js
+++ b/dist/api/host.js
@@ -1,10 +1,10 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var isLocal = window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('127.0.0.1') > -1;
+let isLocal = window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('127.0.0.1') > -1;
 if (parseInt(window.location.port) !== 8081) {
     isLocal = false;
 }
-var stage_prod = window.location.pathname.indexOf('webmapsstage') > -1 ? 'webmapsstage' : 'webmaps';
-exports.hostRoot = isLocal ? 'http://localhost:8081' : "https://transportal.cee.wisc.edu/gis/" + stage_prod;
-exports.apiRoot = exports.hostRoot + "/api";
+let stage_prod = window.location.pathname.indexOf('webmapsstage') > -1 ? 'webmapsstage' : 'webmaps';
+exports.hostRoot = isLocal ? 'http://localhost:8081' : `https://transportal.cee.wisc.edu/gis/${stage_prod}`;
+exports.apiRoot = exports.hostRoot + `/api`;
 //# sourceMappingURL=host.js.map
\ No newline at end of file
diff --git a/dist/api/host.js.map b/dist/api/host.js.map
index b8c7968..32e40f2 100644
--- a/dist/api/host.js.map
+++ b/dist/api/host.js.map
@@ -1 +1 @@
-{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/api/host.ts"],"names":[],"mappings":";;AAAA,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/G,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAC;IACxC,OAAO,GAAG,KAAK,CAAC;CACnB;AAGD,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAEvF,QAAA,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,0CAAwC,UAAY,CAAC;AAEpG,QAAA,OAAO,GAAG,gBAAQ,GAAG,MAAM,CAAC","sourcesContent":["let isLocal = window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('127.0.0.1') > -1;\r\n\r\nif (parseInt(window.location.port) !== 8081){\r\n    isLocal = false;\r\n}\r\n\r\n\r\nlet stage_prod = window.location.pathname.indexOf('webmapsstage') > -1 ? 'webmapsstage' : 'webmaps';\r\n\r\nexport const hostRoot = isLocal ? 'http://localhost:8081' : `https://transportal.cee.wisc.edu/gis/${stage_prod}`;\r\n\r\nexport const apiRoot = hostRoot + `/api`;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/api/host.ts"],"names":[],"mappings":";;AAAA,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/G,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAC;IACxC,OAAO,GAAG,KAAK,CAAC;CACnB;AAGD,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;AAEvF,QAAA,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,wCAAwC,UAAU,EAAE,CAAC;AAEpG,QAAA,OAAO,GAAG,gBAAQ,GAAG,MAAM,CAAC","sourcesContent":["let isLocal = window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('127.0.0.1') > -1;\r\n\r\nif (parseInt(window.location.port) !== 8081){\r\n    isLocal = false;\r\n}\r\n\r\n\r\nlet stage_prod = window.location.pathname.indexOf('webmapsstage') > -1 ? 'webmapsstage' : 'webmaps';\r\n\r\nexport const hostRoot = isLocal ? 'http://localhost:8081' : `https://transportal.cee.wisc.edu/gis/${stage_prod}`;\r\n\r\nexport const apiRoot = hostRoot + `/api`;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/api/npmrds.js b/dist/api/npmrds.js
index 0cf1614..b20e1ab 100644
--- a/dist/api/npmrds.js
+++ b/dist/api/npmrds.js
@@ -3,9 +3,9 @@
  * Created by glenn on 6/13/2017.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var ajx = require("./axios");
-var empty = require("./_npmrdsEmpty");
-var host_1 = require("./host");
+const ajx = require("./axios");
+const empty = require("./_npmrdsEmpty");
+const host_1 = require("./host");
 exports.npmrdsApiUrl = host_1.apiRoot + '/npmrds';
 function _abortHelper(x) {
     if (x && x['abort']) {
@@ -23,8 +23,8 @@ function makeExtent(ext) {
         return JSON.stringify(ext.coordinates);
     }
     else if (ext.bottom && ext.top && ext.left && ext.right) {
-        var bottom_left = [ext.left, ext.bottom];
-        var ext_arr = [bottom_left];
+        let bottom_left = [ext.left, ext.bottom];
+        let ext_arr = [bottom_left];
         ext_arr.push([ext.left, ext.top]);
         ext_arr.push([ext.right, ext.top]);
         ext_arr.push([ext.right, ext.bottom]);
@@ -35,16 +35,15 @@ function makeExtent(ext) {
         return undefined;
     }
 }
-function getRoads(extent, version, callback, error) {
-    if (error === void 0) { error = function () {
-    }; }
-    var ext = makeExtent(extent);
+function getRoads(extent, version, callback, error = () => {
+}) {
+    let ext = makeExtent(extent);
     if (ext == null) {
         callback({ roads: [] });
     }
     else if (ext) {
-        var params = { extent: makeExtent(extent), version: version };
-        ajx.get(exports.npmrdsApiUrl + '/roads', function (d) {
+        let params = { extent: makeExtent(extent), version: version };
+        ajx.get(exports.npmrdsApiUrl + '/roads', (d) => {
             if (d.error) {
                 error(d);
             }
@@ -58,11 +57,9 @@ function getRoads(extent, version, callback, error) {
     }
 }
 exports.getRoads = getRoads;
-function getGeometry(extent, version, callback, options, error) {
-    if (options === void 0) { options = {}; }
-    if (error === void 0) { error = function () {
-    }; }
-    var ext = makeExtent(extent);
+function getGeometry(extent, version, callback, options = {}, error = () => {
+}) {
+    let ext = makeExtent(extent);
     if (ext == null) {
         callback(empty.emptyGeometry);
     }
@@ -70,7 +67,7 @@ function getGeometry(extent, version, callback, options, error) {
         error({ error: "Invalid Extent" });
     }
     else {
-        var params = { extent: ext, version: version };
+        let params = { extent: ext, version: version };
         if (options.roadDirection) {
             params['road'] = options.roadDirection.road;
             params['direction'] = options.roadDirection.direction;
@@ -79,7 +76,7 @@ function getGeometry(extent, version, callback, options, error) {
             params['start'] = options.startEnd.start;
             params['end'] = options.startEnd.end;
         }
-        ajx.get(exports.npmrdsApiUrl + '/geometry', function (d) {
+        ajx.get(exports.npmrdsApiUrl + '/geometry', (d) => {
             if (d.error) {
                 error(d);
             }
@@ -90,12 +87,10 @@ function getGeometry(extent, version, callback, options, error) {
     }
 }
 exports.getGeometry = getGeometry;
-function getRoute(road, direction, version, callback, options, error) {
-    if (options === void 0) { options = {}; }
-    if (error === void 0) { error = function () {
-    }; }
-    var params = { road: road, direction: direction, version: version };
-    var ext;
+function getRoute(road, direction, version, callback, options = {}, error = () => {
+}) {
+    let params = { road: road, direction: direction, version: version };
+    let ext;
     if (options.extent) {
         ext = makeExtent(options.extent);
         if (ext == null) {
@@ -114,7 +109,7 @@ function getRoute(road, direction, version, callback, options, error) {
         params['start'] = options.startEnd.start;
         params['end'] = options.startEnd.end;
     }
-    ajx.get(exports.npmrdsApiUrl + '/route', function (d) {
+    ajx.get(exports.npmrdsApiUrl + '/route', (d) => {
         if (d.error) {
             error(d);
         }
@@ -124,12 +119,10 @@ function getRoute(road, direction, version, callback, options, error) {
     }, params, error);
 }
 exports.getRoute = getRoute;
-function getTmcs(lon, lat, version, searchDist, callback, error) {
-    if (searchDist === void 0) { searchDist = 2000; }
-    if (error === void 0) { error = function () {
-    }; }
-    var params = { lon: lon, lat: lat, version: version, search: searchDist };
-    ajx.get(exports.npmrdsApiUrl + '/tmcs', function (d) {
+function getTmcs(lon, lat, version, searchDist = 2000, callback, error = () => {
+}) {
+    let params = { lon: lon, lat: lat, version: version, search: searchDist };
+    ajx.get(exports.npmrdsApiUrl + '/tmcs', (d) => {
         if (d.error) {
             error(d);
         }
@@ -139,11 +132,10 @@ function getTmcs(lon, lat, version, searchDist, callback, error) {
     }, params, error);
 }
 exports.getTmcs = getTmcs;
-function getTmc(tmc, version, callback, error) {
-    if (error === void 0) { error = function () {
-    }; }
-    var params = { tmc: tmc, version: version };
-    ajx.get(exports.npmrdsApiUrl + '/tmc', function (d) {
+function getTmc(tmc, version, callback, error = () => {
+}) {
+    let params = { tmc: tmc, version: version };
+    ajx.get(exports.npmrdsApiUrl + '/tmc', (d) => {
         if (d.error) {
             error(d);
         }
diff --git a/dist/api/npmrds.js.map b/dist/api/npmrds.js.map
index 41ffce4..f099c62 100644
--- a/dist/api/npmrds.js.map
+++ b/dist/api/npmrds.js.map
@@ -1 +1 @@
-{"version":3,"file":"npmrds.js","sourceRoot":"","sources":["../../src/api/npmrds.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nimport $ = require('jquery');\r\nimport * as ajx from './axios';\r\nimport {iExtent, iGetRoads, iError, iGeometry, iRoute} from './_npmrdsInterfaces';\r\nimport * as empty from './_npmrdsEmpty'\r\nimport {apiRoot} from './host';\r\n\r\nexport const npmrdsApiUrl = apiRoot + '/npmrds';\r\n\r\n\r\nfunction _abortHelper(x: XMLHttpRequest) {\r\n    if (x && x['abort']) {\r\n        x.abort();\r\n    }\r\n}\r\n\r\nfunction makeExtent(ext: iExtent): string {\r\n    if (!ext) {\r\n        return null;\r\n    }\r\n\r\n    if (ext.coordinates) {\r\n        if (ext.coordinates.length < 4) {\r\n            throw \"npmrds api: coordinate array must have at least 3 vertices, last one closing\";\r\n        }\r\n        return JSON.stringify(ext.coordinates);\r\n    } else if (ext.bottom && ext.top && ext.left && ext.right) {\r\n        let bottom_left = [ext.left, ext.bottom];\r\n        let ext_arr = [bottom_left];\r\n        ext_arr.push([ext.left, ext.top]);\r\n        ext_arr.push([ext.right, ext.top]);\r\n        ext_arr.push([ext.right, ext.bottom]);\r\n        ext_arr.push(bottom_left);\r\n        return JSON.stringify(ext_arr);\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n\r\nexport function getRoads(extent: iExtent,\r\n                         version: number,\r\n                         callback: (d: iGetRoads) => any,\r\n                         error: (e: iError) => any = () => {\r\n                         }) {\r\n\r\n    let ext = makeExtent(extent);\r\n\r\n    if (ext == null) {\r\n        callback({roads: []})\r\n    } else if (ext) {\r\n        let params = {extent: makeExtent(extent), version: version};\r\n        ajx.get(npmrdsApiUrl + '/roads', (d: iGetRoads | iError) => {\r\n            if ((d as iError).error) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d as iGetRoads)\r\n            }\r\n\r\n        }, params, error);\r\n    } else {\r\n        error({error: \"invalid extent\"})\r\n    }\r\n}\r\n\r\n\r\nexport function getGeometry(extent: iExtent, version: number,\r\n                            callback: (d: iGeometry) => any,\r\n                            options: {\r\n                                roadDirection?: { road: string, direction: string },\r\n                                startEnd?: { start: string, end: string }\r\n                            } = {},\r\n                            error: (e: iError) => any = () => {\r\n                            }) {\r\n\r\n    let ext = makeExtent(extent);\r\n\r\n    if (ext == null) {\r\n        callback(empty.emptyGeometry);\r\n    } else if (typeof ext == 'undefined') {\r\n        error({error: \"Invalid Extent\"});\r\n    } else {\r\n        let params = {extent: ext, version: version};\r\n        if (options.roadDirection) {\r\n            params['road'] = options.roadDirection.road;\r\n            params['direction'] = options.roadDirection.direction;\r\n        }\r\n\r\n        if (options.startEnd) {\r\n            params['start'] = options.startEnd.start;\r\n            params['end'] = options.startEnd.end;\r\n        }\r\n\r\n        ajx.get(npmrdsApiUrl + '/geometry', (d: iGeometry | iError) => {\r\n            if ((d as iError).error) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d as iGeometry)\r\n            }\r\n        }, params, error);\r\n    }\r\n}\r\n\r\nexport function getRoute(road: string, direction: string, version: number,\r\n                         callback: (d: iRoute) => any,\r\n                         options: {\r\n                             extent?: iExtent,\r\n                             startEnd?: { start: string, end: string },\r\n                             version?: number\r\n                         } = {},\r\n                         error: (e: iError) => any = () => {\r\n                         }) {\r\n\r\n    let params = {road: road, direction: direction, version: version};\r\n\r\n    let ext;\r\n\r\n    if (options.extent) {\r\n        ext = makeExtent(options.extent);\r\n\r\n        if (ext == null) {\r\n            callback(empty.emptyRoute);\r\n            return;\r\n        } else if (typeof ext == 'undefined') {\r\n            error({error: \"Invalid Extent\"});\r\n            return;\r\n        }\r\n    }\r\n\r\n    if (ext) {\r\n        params['extent'] = ext;\r\n    }\r\n\r\n    if (options.startEnd) {\r\n        params['start'] = options.startEnd.start;\r\n        params['end'] = options.startEnd.end;\r\n    }\r\n\r\n    ajx.get(npmrdsApiUrl + '/route', (d: iRoute | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d as iRoute)\r\n        }\r\n    }, params, error);\r\n}\r\n\r\nexport function getTmcs(lon: number, lat: number, version: number, searchDist: number = 2000,\r\n                        callback: (d) => any,\r\n                        error: (e: iError) => any = () => {\r\n                        }) {\r\n\r\n    let params = {lon: lon, lat: lat, version: version, search: searchDist};\r\n\r\n    ajx.get(npmrdsApiUrl + '/tmcs', (d: iGeometry | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d)\r\n        }\r\n    }, params, error);\r\n}\r\n\r\n\r\nexport function getTmc(tmc: string, version: number,\r\n                        callback: (d) => any,\r\n                        error: (e: iError) => any = () => {\r\n                        }) {\r\n    let params = {tmc: tmc, version: version};\r\n\r\n    ajx.get(npmrdsApiUrl + '/tmc', (d: iGeometry | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d)\r\n        }\r\n    }, params, error);\r\n}\r\n"]}
\ No newline at end of file
+{"version":3,"file":"npmrds.js","sourceRoot":"","sources":["../../src/api/npmrds.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,+BAA+B;AAE/B,wCAAuC;AACvC,iCAA+B;AAElB,QAAA,YAAY,GAAG,cAAO,GAAG,SAAS,CAAC;AAGhD,SAAS,YAAY,CAAC,CAAiB;IACnC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;QACjB,CAAC,CAAC,KAAK,EAAE,CAAC;KACb;AACL,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC5B,IAAI,CAAC,GAAG,EAAE;QACN,OAAO,IAAI,CAAC;KACf;IAED,IAAI,GAAG,CAAC,WAAW,EAAE;QACjB,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,MAAM,8EAA8E,CAAC;SACxF;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAC1C;SAAM,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;QACvD,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAClC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAGD,SAAgB,QAAQ,CAAC,MAAe,EACf,OAAe,EACf,QAA+B,EAC/B,QAA4B,GAAG,EAAE;AACjC,CAAC;IAEtB,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,QAAQ,CAAC,EAAC,KAAK,EAAE,EAAE,EAAC,CAAC,CAAA;KACxB;SAAM,IAAI,GAAG,EAAE;QACZ,IAAI,MAAM,GAAG,EAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;QAC5D,GAAG,CAAC,GAAG,CAAC,oBAAY,GAAG,QAAQ,EAAE,CAAC,CAAqB,EAAE,EAAE;YACvD,IAAK,CAAY,CAAC,KAAK,EAAE;gBACrB,KAAK,CAAC,CAAW,CAAC,CAAA;aACrB;iBAAM;gBACH,QAAQ,CAAC,CAAc,CAAC,CAAA;aAC3B;QAEL,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACrB;SAAM;QACH,KAAK,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAA;KACnC;AACL,CAAC;AAvBD,4BAuBC;AAGD,SAAgB,WAAW,CAAC,MAAe,EAAE,OAAe,EAChC,QAA+B,EAC/B,UAGI,EAAE,EACN,QAA4B,GAAG,EAAE;AACjC,CAAC;IAEzB,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;KACjC;SAAM,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;QAClC,KAAK,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAC;KACpC;SAAM;QACH,IAAI,MAAM,GAAG,EAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,aAAa,EAAE;YACvB,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;SACzD;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;SACxC;QAED,GAAG,CAAC,GAAG,CAAC,oBAAY,GAAG,WAAW,EAAE,CAAC,CAAqB,EAAE,EAAE;YAC1D,IAAK,CAAY,CAAC,KAAK,EAAE;gBACrB,KAAK,CAAC,CAAW,CAAC,CAAA;aACrB;iBAAM;gBACH,QAAQ,CAAC,CAAc,CAAC,CAAA;aAC3B;QACL,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KACrB;AACL,CAAC;AAnCD,kCAmCC;AAED,SAAgB,QAAQ,CAAC,IAAY,EAAE,SAAiB,EAAE,OAAe,EAChD,QAA4B,EAC5B,UAII,EAAE,EACN,QAA4B,GAAG,EAAE;AACjC,CAAC;IAEtB,IAAI,MAAM,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;IAElE,IAAI,GAAG,CAAC;IAER,IAAI,OAAO,CAAC,MAAM,EAAE;QAChB,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,OAAO;SACV;aAAM,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;YAClC,KAAK,CAAC,EAAC,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAC;YACjC,OAAO;SACV;KACJ;IAED,IAAI,GAAG,EAAE;QACL,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;KAC1B;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;KACxC;IAED,GAAG,CAAC,GAAG,CAAC,oBAAY,GAAG,QAAQ,EAAE,CAAC,CAAkB,EAAE,EAAE;QACpD,IAAK,CAAY,CAAC,KAAK,EAAE;YACrB,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAW,CAAC,CAAA;SACxB;IACL,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AA1CD,4BA0CC;AAED,SAAgB,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,OAAe,EAAE,aAAqB,IAAI,EACpE,QAAoB,EACpB,QAA4B,GAAG,EAAE;AACjC,CAAC;IAErB,IAAI,MAAM,GAAG,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC;IAExE,GAAG,CAAC,GAAG,CAAC,oBAAY,GAAG,OAAO,EAAE,CAAC,CAAqB,EAAE,EAAE;QACtD,IAAK,CAAY,CAAC,KAAK,EAAE;YACrB,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAdD,0BAcC;AAGD,SAAgB,MAAM,CAAC,GAAW,EAAE,OAAe,EAC3B,QAAoB,EACpB,QAA4B,GAAG,EAAE;AACjC,CAAC;IACrB,IAAI,MAAM,GAAG,EAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC;IAE1C,GAAG,CAAC,GAAG,CAAC,oBAAY,GAAG,MAAM,EAAE,CAAC,CAAqB,EAAE,EAAE;QACrD,IAAK,CAAY,CAAC,KAAK,EAAE;YACrB,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtB,CAAC;AAbD,wBAaC","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nimport $ = require('jquery');\r\nimport * as ajx from './axios';\r\nimport {iExtent, iGetRoads, iError, iGeometry, iRoute} from './_npmrdsInterfaces';\r\nimport * as empty from './_npmrdsEmpty'\r\nimport {apiRoot} from './host';\r\n\r\nexport const npmrdsApiUrl = apiRoot + '/npmrds';\r\n\r\n\r\nfunction _abortHelper(x: XMLHttpRequest) {\r\n    if (x && x['abort']) {\r\n        x.abort();\r\n    }\r\n}\r\n\r\nfunction makeExtent(ext: iExtent): string {\r\n    if (!ext) {\r\n        return null;\r\n    }\r\n\r\n    if (ext.coordinates) {\r\n        if (ext.coordinates.length < 4) {\r\n            throw \"npmrds api: coordinate array must have at least 3 vertices, last one closing\";\r\n        }\r\n        return JSON.stringify(ext.coordinates);\r\n    } else if (ext.bottom && ext.top && ext.left && ext.right) {\r\n        let bottom_left = [ext.left, ext.bottom];\r\n        let ext_arr = [bottom_left];\r\n        ext_arr.push([ext.left, ext.top]);\r\n        ext_arr.push([ext.right, ext.top]);\r\n        ext_arr.push([ext.right, ext.bottom]);\r\n        ext_arr.push(bottom_left);\r\n        return JSON.stringify(ext_arr);\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n\r\nexport function getRoads(extent: iExtent,\r\n                         version: number,\r\n                         callback: (d: iGetRoads) => any,\r\n                         error: (e: iError) => any = () => {\r\n                         }) {\r\n\r\n    let ext = makeExtent(extent);\r\n\r\n    if (ext == null) {\r\n        callback({roads: []})\r\n    } else if (ext) {\r\n        let params = {extent: makeExtent(extent), version: version};\r\n        ajx.get(npmrdsApiUrl + '/roads', (d: iGetRoads | iError) => {\r\n            if ((d as iError).error) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d as iGetRoads)\r\n            }\r\n\r\n        }, params, error);\r\n    } else {\r\n        error({error: \"invalid extent\"})\r\n    }\r\n}\r\n\r\n\r\nexport function getGeometry(extent: iExtent, version: number,\r\n                            callback: (d: iGeometry) => any,\r\n                            options: {\r\n                                roadDirection?: { road: string, direction: string },\r\n                                startEnd?: { start: string, end: string }\r\n                            } = {},\r\n                            error: (e: iError) => any = () => {\r\n                            }) {\r\n\r\n    let ext = makeExtent(extent);\r\n\r\n    if (ext == null) {\r\n        callback(empty.emptyGeometry);\r\n    } else if (typeof ext == 'undefined') {\r\n        error({error: \"Invalid Extent\"});\r\n    } else {\r\n        let params = {extent: ext, version: version};\r\n        if (options.roadDirection) {\r\n            params['road'] = options.roadDirection.road;\r\n            params['direction'] = options.roadDirection.direction;\r\n        }\r\n\r\n        if (options.startEnd) {\r\n            params['start'] = options.startEnd.start;\r\n            params['end'] = options.startEnd.end;\r\n        }\r\n\r\n        ajx.get(npmrdsApiUrl + '/geometry', (d: iGeometry | iError) => {\r\n            if ((d as iError).error) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d as iGeometry)\r\n            }\r\n        }, params, error);\r\n    }\r\n}\r\n\r\nexport function getRoute(road: string, direction: string, version: number,\r\n                         callback: (d: iRoute) => any,\r\n                         options: {\r\n                             extent?: iExtent,\r\n                             startEnd?: { start: string, end: string },\r\n                             version?: number\r\n                         } = {},\r\n                         error: (e: iError) => any = () => {\r\n                         }) {\r\n\r\n    let params = {road: road, direction: direction, version: version};\r\n\r\n    let ext;\r\n\r\n    if (options.extent) {\r\n        ext = makeExtent(options.extent);\r\n\r\n        if (ext == null) {\r\n            callback(empty.emptyRoute);\r\n            return;\r\n        } else if (typeof ext == 'undefined') {\r\n            error({error: \"Invalid Extent\"});\r\n            return;\r\n        }\r\n    }\r\n\r\n    if (ext) {\r\n        params['extent'] = ext;\r\n    }\r\n\r\n    if (options.startEnd) {\r\n        params['start'] = options.startEnd.start;\r\n        params['end'] = options.startEnd.end;\r\n    }\r\n\r\n    ajx.get(npmrdsApiUrl + '/route', (d: iRoute | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d as iRoute)\r\n        }\r\n    }, params, error);\r\n}\r\n\r\nexport function getTmcs(lon: number, lat: number, version: number, searchDist: number = 2000,\r\n                        callback: (d) => any,\r\n                        error: (e: iError) => any = () => {\r\n                        }) {\r\n\r\n    let params = {lon: lon, lat: lat, version: version, search: searchDist};\r\n\r\n    ajx.get(npmrdsApiUrl + '/tmcs', (d: iGeometry | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d)\r\n        }\r\n    }, params, error);\r\n}\r\n\r\n\r\nexport function getTmc(tmc: string, version: number,\r\n                        callback: (d) => any,\r\n                        error: (e: iError) => any = () => {\r\n                        }) {\r\n    let params = {tmc: tmc, version: version};\r\n\r\n    ajx.get(npmrdsApiUrl + '/tmc', (d: iGeometry | iError) => {\r\n        if ((d as iError).error) {\r\n            error(d as iError)\r\n        } else {\r\n            callback(d)\r\n        }\r\n    }, params, error);\r\n}\r\n"]}
\ No newline at end of file
diff --git a/dist/api/stn.js b/dist/api/stn.js
index d29a009..8798c22 100644
--- a/dist/api/stn.js
+++ b/dist/api/stn.js
@@ -3,8 +3,8 @@
  * Created by glenn on 6/13/2017.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var ajx = require("./axios");
-var host_1 = require("./host");
+const ajx = require("./axios");
+const host_1 = require("./host");
 exports.stnApiUrl = host_1.apiRoot + '/stn';
 function _abortHelper(x) {
     if (x && x['abort']) {
@@ -20,15 +20,12 @@ function _abortHelper(x) {
  * @param {(d: iRoutes) => any} callback
  * @param {(e: iError) => any} error
  */
-function getRoutes(yr, lon, lat, searchDistance, callback, error) {
-    if (searchDistance === void 0) { searchDistance = 200; }
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/routes', function (d) {
+function getRoutes(yr, lon, lat, searchDistance = 200, callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/routes', (d) => {
         if (d.error) {
             error(d);
         }
@@ -53,15 +50,12 @@ exports.getRoutes = getRoutes;
  * @param {(d) => any} callback
  * @param {(e: iError) => any} error
  */
-function getSnappedPoint(yr, routeId, lon, lat, searchDistance, callback, error) {
-    if (searchDistance === void 0) { searchDistance = 200; }
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/snapped', function (d) {
+function getSnappedPoint(yr, routeId, lon, lat, searchDistance = 200, callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/snapped', (d) => {
         if (d['error']) {
             error(d);
         }
@@ -89,15 +83,12 @@ exports.getSnappedPoint = getSnappedPoint;
  * @param {(d) => any} callback
  * @param {(e: iError) => any} error
  */
-function getStnSegment(yr, routeId, lonStart, latStart, lonEnd, latEnd, searchDistance, callback, error) {
-    if (searchDistance === void 0) { searchDistance = 200; }
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/segment', function (d) {
+function getStnSegment(yr, routeId, lonStart, latStart, lonEnd, latEnd, searchDistance = 200, callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/segment', (d) => {
         if (d['error']) {
             error(d);
         }
@@ -115,14 +106,12 @@ function getStnSegment(yr, routeId, lonStart, latStart, lonEnd, latEnd, searchDi
     }, error);
 }
 exports.getStnSegment = getStnSegment;
-function getStnSegmentByMiles(yr, routeId, startMile, endMile, callback, error) {
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/segment', function (d) {
+function getStnSegmentByMiles(yr, routeId, startMile, endMile, callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/segment', (d) => {
         if (d['error']) {
             error(d);
         }
@@ -137,14 +126,12 @@ function getStnSegmentByMiles(yr, routeId, startMile, endMile, callback, error)
     }, error);
 }
 exports.getStnSegmentByMiles = getStnSegmentByMiles;
-function getStnYears(callback, error) {
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/years', function (d) {
+function getStnYears(callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/years', (d) => {
         if (d['error']) {
             error(d);
         }
@@ -154,14 +141,12 @@ function getStnYears(callback, error) {
     }, {}, error);
 }
 exports.getStnYears = getStnYears;
-function getRouteGeom(year, route, callback, error) {
-    if (callback === void 0) { callback = function (d) {
-        console.log(d);
-    }; }
-    if (error === void 0) { error = function (e) {
-        console.log(e);
-    }; }
-    ajx.get(exports.stnApiUrl + '/route', function (d) {
+function getRouteGeom(year, route, callback = (d) => {
+    console.log(d);
+}, error = (e) => {
+    console.log(e);
+}) {
+    ajx.get(exports.stnApiUrl + '/route', (d) => {
         if (d['error']) {
             error(d);
         }
diff --git a/dist/api/stn.js.map b/dist/api/stn.js.map
index b7201ca..e53957b 100644
--- a/dist/api/stn.js.map
+++ b/dist/api/stn.js.map
@@ -1 +1 @@
-{"version":3,"file":"stn.js","sourceRoot":"","sources":["../../src/api/stn.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6BAA+B;AAC/B,+BAA+B;AAElB,QAAA,SAAS,GAAG,cAAO,GAAG,MAAM,CAAC;AAE1C,SAAS,YAAY,CAAC,CAAiB;IACnC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;QACjB,CAAC,CAAC,KAAK,EAAE,CAAC;KACb;AACL,CAAC;AAoFD;;;;;;;;GAQG;AACH,SAAgB,SAAS,CAAC,EAAU,EACV,GAAW,EACX,GAAW,EACX,cAA4B,EAC5B,QAEC,EACD,KAEC;IAND,+BAAA,EAAA,oBAA4B;IAC5B,yBAAA,EAAA,qBAAiC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,SAAS,EAAE,UAAC,CAAU;QAClC,IAAI,CAAC,CAAC,KAAK,EAAE;YACT,KAAK,CAAC,CAAC,CAAC,CAAA;SACX;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IAEL,CAAC,EACD;QACI,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,QAAQ,EAAE,cAAc;KAC3B,EACD,KAAK,CACR,CAAC;AACN,CAAC;AA3BD,8BA2BC;AAED;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,EAAU,EACV,OAAe,EACf,GAAW,EACX,GAAW,EACX,cAA4B,EAC5B,QAEC,EACD,KAEC;IAND,+BAAA,EAAA,oBAA4B;IAC5B,yBAAA,EAAA,qBAA8C,CAAuB;QACjE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAE7B,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,UAAU,EAAE,UAAC,CAAuB;QAChD,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EACD;QACI,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,QAAQ,EAAE,cAAc;KAC3B,EACD,KAAK,CACR,CAAC;AACN,CAAC;AA5BD,0CA4BC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,aAAa,CAAC,EAAU,EACV,OAAe,EACf,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAc,EACd,cAA4B,EAC5B,QAEC,EACD,KAEC;IAND,+BAAA,EAAA,oBAA4B;IAC5B,yBAAA,EAAA,qBAA4C,CAAqB;QAC7D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAE3B,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,UAAU,EAAE,UAAC,CAAqB;QAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EACD;QACI,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,cAAc;KAC3B,EACD,KAAK,CACR,CAAC;AACN,CAAC;AAhCD,sCAgCC;AAGD,SAAgB,oBAAoB,CAChC,EAAU,EACV,OAAe,EACf,SAAiB,EACjB,OAAe,EACf,QAEC,EACD,KAEC;IALD,yBAAA,EAAA,qBAA4C,CAAqB;QAC7D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,UAAU,EAAE,UAAC,CAAqB;QAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EACD;QACI,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;KACnB,EACD,KAAK,CACR,CAAC;AACN,CAAC;AA3BD,oDA2BC;AAED,SAAgB,WAAW,CACvB,QAEC,EACD,KAEC;IALD,yBAAA,EAAA,qBAA6C,CAAsB;QAC/D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,QAAQ,EAAE,UAAC,CAAsB;QAC7C,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EACD,EAAE,EACF,KAAK,CACR,CAAC;AACN,CAAC;AAlBD,kCAkBC;AAwBD,SAAgB,YAAY,CAAC,IAAY,EAAE,KAAa,EAC3B,QAEC,EACD,KAEC;IALD,yBAAA,EAAA,qBAAoC,CAAa;QAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,sBAAA,EAAA,kBAA6B,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAE1B,GAAG,CAAC,GAAG,CAAC,iBAAS,GAAG,QAAQ,EAAE,UAAC,CAAa;QACpC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;YACZ,KAAK,CAAC,CAAW,CAAC,CAAA;SACrB;aAAM;YACH,QAAQ,CAAC,CAAC,CAAC,CAAA;SACd;IACL,CAAC,EACD,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,EAC1B,KAAK,CACR,CAAC;AACN,CAAC;AAlBD,oCAkBC","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nimport * as ajx from './axios';\r\nimport {apiRoot} from './host';\r\n\r\nexport const stnApiUrl = apiRoot + '/stn';\r\n\r\nfunction _abortHelper(x: XMLHttpRequest) {\r\n    if (x && x['abort']) {\r\n        x.abort();\r\n    }\r\n}\r\n\r\nexport interface iError {\r\n    error?: string;\r\n}\r\n\r\nexport interface iRoutes extends iError {\r\n    routes: { [s: string]: number }\r\n}\r\n\r\nexport interface iGeoFeature {\r\n    type: string;\r\n    geometry: Object;\r\n    properties: Object;\r\n}\r\n\r\nexport interface iSnappedPoint {\r\n    type: string;\r\n    geometry: {\r\n        type: string;\r\n        coordinates: [number, number]\r\n    },\r\n    properties: {\r\n        cumtMilg: number;\r\n        dtLinkCurr: string;\r\n        dtOpnTrfc: string;\r\n        dtTrxHstl: string;\r\n        editIndc: number;\r\n        lcmCkotTxnId: number;\r\n        lcmDtHstl: number;\r\n        lcmDtTxnCurr: string;\r\n        lcmFromToDis: number;\r\n        lcmStus: number;\r\n        lnkOffsetMi: number;\r\n        lnkOffsetPcnt: number;\r\n        rdwyLinkId: number;\r\n        refSiteFromId: number;\r\n        refSiteToId: number;\r\n        routeIds: number[];\r\n        year: number;\r\n    }\r\n}\r\n\r\nexport interface iStnSegment {\r\n    type: string;\r\n    geometry: {\r\n        type: string;\r\n        coordinates: Array<number[]>\r\n    },\r\n    properties: {\r\n        cumtMilgEnd: number;\r\n        cumtMilgStart: number;\r\n        offsetMiEnd: number;\r\n        offsetMiStart: number;\r\n        offsetPcntEnd: number;\r\n        offsetPcntStart: number;\r\n        rdwyLinkIdEnd: number;\r\n        rdwyLinkIdStart: number;\r\n        rdwyLinkIds: number[];\r\n        rdwyRteId: number;\r\n        year: number;\r\n    }\r\n}\r\n\r\nexport interface _iGeoJson {\r\n    type: string;\r\n    crs: {\r\n        type: string;\r\n        properties: {\r\n            name: string;\r\n        }\r\n    };\r\n    features: any[];\r\n}\r\n\r\nexport interface iGeoJsonSnappedPoint extends _iGeoJson {\r\n    features: iSnappedPoint[];\r\n}\r\n\r\nexport interface iGeoJsonStnSegment extends _iGeoJson {\r\n    features: iStnSegment[];\r\n}\r\n\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} lon\r\n * @param {number} lat\r\n * @param {number} searchDistance\r\n * @param {(d: iRoutes) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getRoutes(yr: number,\r\n                          lon: number,\r\n                          lat: number,\r\n                          searchDistance: number = 200,\r\n                          callback: (d: iRoutes) => any = (d) => {\r\n                              console.log(d);\r\n                          },\r\n                          error: (e: iError) => any = (e) => {\r\n                              console.log(e);\r\n                          }) {\r\n\r\n    ajx.get(stnApiUrl + '/routes', (d: iRoutes) => {\r\n            if (d.error) {\r\n                error(d)\r\n            } else {\r\n                callback(d)\r\n            }\r\n\r\n        },\r\n        {\r\n            year: yr,\r\n            lon: lon,\r\n            lat: lat,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} routeId\r\n * @param {number} lon\r\n * @param {number} lat\r\n * @param {number} searchDistance\r\n * @param {(d) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getSnappedPoint(yr: number,\r\n                                routeId: number,\r\n                                lon: number,\r\n                                lat: number,\r\n                                searchDistance: number = 200,\r\n                                callback: (d: iGeoJsonSnappedPoint) => any = (d: iGeoJsonSnappedPoint) => {\r\n                                    console.log(d);\r\n                                },\r\n                                error: (e: iError) => any = (e) => {\r\n                                    console.log(e);\r\n                                }) {\r\n\r\n    ajx.get(stnApiUrl + '/snapped', (d: iGeoJsonSnappedPoint) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            lon: lon,\r\n            lat: lat,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} routeId\r\n * @param {number} lonStart\r\n * @param {number} latStart\r\n * @param {number} lonEnd\r\n * @param {number} latEnd\r\n * @param {number} searchDistance\r\n * @param {(d) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getStnSegment(yr: number,\r\n                              routeId: number,\r\n                              lonStart: number,\r\n                              latStart: number,\r\n                              lonEnd: number,\r\n                              latEnd: number,\r\n                              searchDistance: number = 200,\r\n                              callback: (d: iGeoJsonStnSegment) => any = (d: iGeoJsonStnSegment) => {\r\n                                  console.log(d);\r\n                              },\r\n                              error: (e: iError) => any = (e) => {\r\n                                  console.log(e);\r\n                              }) {\r\n\r\n    ajx.get(stnApiUrl + '/segment', (d: iGeoJsonStnSegment) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            lonStart: lonStart,\r\n            latStart: latStart,\r\n            lonEnd: lonEnd,\r\n            latEnd: latEnd,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n\r\nexport function getStnSegmentByMiles(\r\n    yr: number,\r\n    routeId: number,\r\n    startMile: number,\r\n    endMile: number,\r\n    callback: (d: iGeoJsonStnSegment) => any = (d: iGeoJsonStnSegment) => {\r\n        console.log(d);\r\n    },\r\n    error: (e: iError) => any = (e) => {\r\n        console.log(e);\r\n    }) {\r\n\r\n    ajx.get(stnApiUrl + '/segment', (d: iGeoJsonStnSegment) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            startMile: startMile,\r\n            endMile: endMile\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\nexport function getStnYears(\r\n    callback: (d: { years: number[] }) => any = (d: { years: number[] }) => {\r\n        console.log(d);\r\n    },\r\n    error: (e: iError) => any = (e) => {\r\n        console.log(e);\r\n    }) {\r\n\r\n    ajx.get(stnApiUrl + '/years', (d: { years: number[] }) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {},\r\n        error\r\n    );\r\n}\r\n\r\nexport interface iRouteGeom {\r\n    type: string,\r\n    crs: {\r\n        type: string\r\n        properties: {\r\n            name: string\r\n        }\r\n    },\r\n    features: {\r\n        type: string,\r\n        properties: {\r\n            rdwyLinkId: number,\r\n            rdwyRteId: number,\r\n            year: number\r\n        },\r\n        geometry: {\r\n            type: string,\r\n            coordinates: [number, number][]\r\n        }\r\n    }[]\r\n}\r\n\r\nexport function getRouteGeom(year: number, route: number,\r\n                             callback: (d: iRouteGeom) => any = (d: iRouteGeom) => {\r\n                                 console.log(d);\r\n                             },\r\n                             error: (e: iError) => any = (e) => {\r\n                                 console.log(e);\r\n                             }) {\r\n\r\n    ajx.get(stnApiUrl + '/route', (d: iRouteGeom) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {year: year, route: route},\r\n        error\r\n    );\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"stn.js","sourceRoot":"","sources":["../../src/api/stn.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nimport * as ajx from './axios';\r\nimport {apiRoot} from './host';\r\n\r\nexport const stnApiUrl = apiRoot + '/stn';\r\n\r\nfunction _abortHelper(x: XMLHttpRequest) {\r\n    if (x && x['abort']) {\r\n        x.abort();\r\n    }\r\n}\r\n\r\nexport interface iError {\r\n    error?: string;\r\n}\r\n\r\nexport interface iRoutes extends iError {\r\n    routes: { [s: string]: number }\r\n}\r\n\r\nexport interface iGeoFeature {\r\n    type: string;\r\n    geometry: Object;\r\n    properties: Object;\r\n}\r\n\r\nexport interface iSnappedPoint {\r\n    type: string;\r\n    geometry: {\r\n        type: string;\r\n        coordinates: [number, number]\r\n    },\r\n    properties: {\r\n        cumtMilg: number;\r\n        dtLinkCurr: string;\r\n        dtOpnTrfc: string;\r\n        dtTrxHstl: string;\r\n        editIndc: number;\r\n        lcmCkotTxnId: number;\r\n        lcmDtHstl: number;\r\n        lcmDtTxnCurr: string;\r\n        lcmFromToDis: number;\r\n        lcmStus: number;\r\n        lnkOffsetMi: number;\r\n        lnkOffsetPcnt: number;\r\n        rdwyLinkId: number;\r\n        refSiteFromId: number;\r\n        refSiteToId: number;\r\n        routeIds: number[];\r\n        year: number;\r\n    }\r\n}\r\n\r\nexport interface iStnSegment {\r\n    type: string;\r\n    geometry: {\r\n        type: string;\r\n        coordinates: Array<number[]>\r\n    },\r\n    properties: {\r\n        cumtMilgEnd: number;\r\n        cumtMilgStart: number;\r\n        offsetMiEnd: number;\r\n        offsetMiStart: number;\r\n        offsetPcntEnd: number;\r\n        offsetPcntStart: number;\r\n        rdwyLinkIdEnd: number;\r\n        rdwyLinkIdStart: number;\r\n        rdwyLinkIds: number[];\r\n        rdwyRteId: number;\r\n        year: number;\r\n    }\r\n}\r\n\r\nexport interface _iGeoJson {\r\n    type: string;\r\n    crs: {\r\n        type: string;\r\n        properties: {\r\n            name: string;\r\n        }\r\n    };\r\n    features: any[];\r\n}\r\n\r\nexport interface iGeoJsonSnappedPoint extends _iGeoJson {\r\n    features: iSnappedPoint[];\r\n}\r\n\r\nexport interface iGeoJsonStnSegment extends _iGeoJson {\r\n    features: iStnSegment[];\r\n}\r\n\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} lon\r\n * @param {number} lat\r\n * @param {number} searchDistance\r\n * @param {(d: iRoutes) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getRoutes(yr: number,\r\n                          lon: number,\r\n                          lat: number,\r\n                          searchDistance: number = 200,\r\n                          callback: (d: iRoutes) => any = (d) => {\r\n                              console.log(d);\r\n                          },\r\n                          error: (e: iError) => any = (e) => {\r\n                              console.log(e);\r\n                          }) {\r\n\r\n    ajx.get(stnApiUrl + '/routes', (d: iRoutes) => {\r\n            if (d.error) {\r\n                error(d)\r\n            } else {\r\n                callback(d)\r\n            }\r\n\r\n        },\r\n        {\r\n            year: yr,\r\n            lon: lon,\r\n            lat: lat,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} routeId\r\n * @param {number} lon\r\n * @param {number} lat\r\n * @param {number} searchDistance\r\n * @param {(d) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getSnappedPoint(yr: number,\r\n                                routeId: number,\r\n                                lon: number,\r\n                                lat: number,\r\n                                searchDistance: number = 200,\r\n                                callback: (d: iGeoJsonSnappedPoint) => any = (d: iGeoJsonSnappedPoint) => {\r\n                                    console.log(d);\r\n                                },\r\n                                error: (e: iError) => any = (e) => {\r\n                                    console.log(e);\r\n                                }) {\r\n\r\n    ajx.get(stnApiUrl + '/snapped', (d: iGeoJsonSnappedPoint) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            lon: lon,\r\n            lat: lat,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n/**\r\n *\r\n * @param {number} yr\r\n * @param {number} routeId\r\n * @param {number} lonStart\r\n * @param {number} latStart\r\n * @param {number} lonEnd\r\n * @param {number} latEnd\r\n * @param {number} searchDistance\r\n * @param {(d) => any} callback\r\n * @param {(e: iError) => any} error\r\n */\r\nexport function getStnSegment(yr: number,\r\n                              routeId: number,\r\n                              lonStart: number,\r\n                              latStart: number,\r\n                              lonEnd: number,\r\n                              latEnd: number,\r\n                              searchDistance: number = 200,\r\n                              callback: (d: iGeoJsonStnSegment) => any = (d: iGeoJsonStnSegment) => {\r\n                                  console.log(d);\r\n                              },\r\n                              error: (e: iError) => any = (e) => {\r\n                                  console.log(e);\r\n                              }) {\r\n\r\n    ajx.get(stnApiUrl + '/segment', (d: iGeoJsonStnSegment) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            lonStart: lonStart,\r\n            latStart: latStart,\r\n            lonEnd: lonEnd,\r\n            latEnd: latEnd,\r\n            distance: searchDistance\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\n\r\nexport function getStnSegmentByMiles(\r\n    yr: number,\r\n    routeId: number,\r\n    startMile: number,\r\n    endMile: number,\r\n    callback: (d: iGeoJsonStnSegment) => any = (d: iGeoJsonStnSegment) => {\r\n        console.log(d);\r\n    },\r\n    error: (e: iError) => any = (e) => {\r\n        console.log(e);\r\n    }) {\r\n\r\n    ajx.get(stnApiUrl + '/segment', (d: iGeoJsonStnSegment) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {\r\n            year: yr,\r\n            route: routeId,\r\n            startMile: startMile,\r\n            endMile: endMile\r\n        },\r\n        error\r\n    );\r\n}\r\n\r\nexport function getStnYears(\r\n    callback: (d: { years: number[] }) => any = (d: { years: number[] }) => {\r\n        console.log(d);\r\n    },\r\n    error: (e: iError) => any = (e) => {\r\n        console.log(e);\r\n    }) {\r\n\r\n    ajx.get(stnApiUrl + '/years', (d: { years: number[] }) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {},\r\n        error\r\n    );\r\n}\r\n\r\nexport interface iRouteGeom {\r\n    type: string,\r\n    crs: {\r\n        type: string\r\n        properties: {\r\n            name: string\r\n        }\r\n    },\r\n    features: {\r\n        type: string,\r\n        properties: {\r\n            rdwyLinkId: number,\r\n            rdwyRteId: number,\r\n            year: number\r\n        },\r\n        geometry: {\r\n            type: string,\r\n            coordinates: [number, number][]\r\n        }\r\n    }[]\r\n}\r\n\r\nexport function getRouteGeom(year: number, route: number,\r\n                             callback: (d: iRouteGeom) => any = (d: iRouteGeom) => {\r\n                                 console.log(d);\r\n                             },\r\n                             error: (e: iError) => any = (e) => {\r\n                                 console.log(e);\r\n                             }) {\r\n\r\n    ajx.get(stnApiUrl + '/route', (d: iRouteGeom) => {\r\n            if (d['error']) {\r\n                error(d as iError)\r\n            } else {\r\n                callback(d)\r\n            }\r\n        },\r\n        {year: year, route: route},\r\n        error\r\n    );\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/collections/ItsLayerCollection.js b/dist/collections/ItsLayerCollection.js
index ffcbccf..f80b440 100644
--- a/dist/collections/ItsLayerCollection.js
+++ b/dist/collections/ItsLayerCollection.js
@@ -3,11 +3,11 @@
  * Created by gavorhes on 12/14/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var colors = require("../util/colors");
-var provide_1 = require("../util/provide");
-var LayerItsInventory_1 = require("../layers/LayerItsInventory");
-var nm = provide_1.default('collections');
-var itsConfig = [
+const colors = require("../util/colors");
+const provide_1 = require("../util/provide");
+const LayerItsInventory_1 = require("../layers/LayerItsInventory");
+let nm = provide_1.default('collections');
+let itsConfig = [
     {
         name: 'Camera',
         itsType: 'cctv',
@@ -93,7 +93,7 @@ var itsConfig = [
         }
     }
 ];
-var ItsLayerCollection = /** @class */ (function () {
+class ItsLayerCollection {
     /**
      * Create a collection of all ITS layers
      * @param theMap the openlayers map
@@ -117,39 +117,34 @@ var ItsLayerCollection = /** @class */ (function () {
      * TOWER Tower - The towers
      * TRENCH
      */
-    function ItsLayerCollection(theMap, exclude) {
+    constructor(theMap, exclude) {
         this._map = theMap;
         this._layers = [];
         exclude = typeof exclude == 'object' ? exclude : [];
-        for (var i = 0; i < itsConfig.length; i++) {
-            var lyrConfig = itsConfig[i];
-            var addLayer = true;
-            for (var j = 0; j < exclude.length; j++) {
+        for (let i = 0; i < itsConfig.length; i++) {
+            let lyrConfig = itsConfig[i];
+            let addLayer = true;
+            for (let j = 0; j < exclude.length; j++) {
                 if (exclude[j] == lyrConfig.itsType) {
                     addLayer = false;
                     break;
                 }
             }
             if (addLayer) {
-                var inventLyr = new LayerItsInventory_1.default(lyrConfig);
+                let inventLyr = new LayerItsInventory_1.default(lyrConfig);
                 this._map.addLayer(inventLyr.olLayer);
                 this._layers.push(inventLyr);
             }
         }
     }
-    Object.defineProperty(ItsLayerCollection.prototype, "layers", {
-        /**
-         * Return the array of layers in this collection
-         * @returns {Array<LayerItsInventory>} an array of layers
-         */
-        get: function () {
-            return this._layers;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return ItsLayerCollection;
-}());
+    /**
+     * Return the array of layers in this collection
+     * @returns {Array<LayerItsInventory>} an array of layers
+     */
+    get layers() {
+        return this._layers;
+    }
+}
 exports.ItsLayerCollection = ItsLayerCollection;
 nm.ItsLayerCollection = ItsLayerCollection;
 exports.default = ItsLayerCollection;
diff --git a/dist/collections/ItsLayerCollection.js.map b/dist/collections/ItsLayerCollection.js.map
index f2e3854..c229c96 100644
--- a/dist/collections/ItsLayerCollection.js.map
+++ b/dist/collections/ItsLayerCollection.js.map
@@ -1 +1 @@
-{"version":3,"file":"ItsLayerCollection.js","sourceRoot":"","sources":["../../src/collections/ItsLayerCollection.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uCAAyC;AACzC,2CAAsC;AACtC,iEAA4D;AAC5D,IAAI,EAAE,GAAG,iBAAO,CAAC,aAAa,CAAC,CAAC;AAIhC,IAAI,SAAS,GAAG;IACZ;QACI,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,EAAE;QACX,aAAa,EAAE;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,QAAQ;YACrB,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE;gBACP,CAAC,iBAAiB,EAAE,SAAS,EAAE,cAAc,CAAC;aACjD;SACJ;KACJ;IACD;QACI,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,EAAE;QACX,aAAa,EAAE;YACX,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE;gBACP,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;aAC/B;SACJ;KACJ;IACD,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAC;IAC7E,EAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC;IAC7G,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAC;IAC3F,EAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAC;IAC3F,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAC;IAC9E,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAC;IACpF,EAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAC;IACzF;QACI,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,MAAM;QACf,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,KAAK;QACd,aAAa,EAAE;YACX,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE;gBACP,CAAC,UAAU,EAAE,UAAU,EAAE,kBAAkB,CAAC;gBAC5C,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC;gBACxC,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC;aAC3C;SACJ;QACD,QAAQ,EAAE,IAAI;KACjB;IACD,EAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAC;IAChG,EAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC;IACxG,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAC;IAChF,EAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAC;IAC3F,EAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAC;IAC7F,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC;IACvG,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAC;IACpF;QACI,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,GAAG;QAClB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO;YACpB,kBAAkB;YAClB,YAAY,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC;YACxD,SAAS,EAAE;gBACP,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAChE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1D,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACtE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC9E,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC9D,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACtE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;aAC7E;SACJ;KACJ;CACJ,CAAC;AAGF;IAKI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,4BAAY,MAAW,EAAE,OAAuB;QAE5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAElB,OAAO,GAAG,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;oBACjC,QAAQ,GAAG,KAAK,CAAC;oBACjB,MAAM;iBACT;aACJ;YAED,IAAI,QAAQ,EAAE;gBACV,IAAI,SAAS,GAAG,IAAI,2BAAiB,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAChC;SACJ;IACL,CAAC;IAMD,sBAAI,sCAAM;QAJV;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;;;OAAA;IAEL,yBAAC;AAAD,CAAC,AA9DD,IA8DC;AA9DY,gDAAkB;AAgE/B,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C,kBAAe,kBAAkB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\nimport Map from 'ol/Map';\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n    _map: Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap: Map, exclude?: Array<string>) {\r\n\r\n        this._map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers(): LayerItsInventory[] {\r\n        return this._layers;\r\n    }\r\n\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"ItsLayerCollection.js","sourceRoot":"","sources":["../../src/collections/ItsLayerCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nimport LayerItsInventory from \"../layers/LayerItsInventory\";\r\nlet nm = provide('collections');\r\nimport Map from 'ol/Map';\r\n\r\n\r\nlet itsConfig = [\r\n    {\r\n        name: 'Camera',\r\n        itsType: 'cctv',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'WisDOT',\r\n            defaultIcon: 'cctv.png',\r\n            iconArray: [\r\n                ['City of Madison', 'Madison', 'cctv-mad.png']\r\n            ]\r\n        }\r\n    },\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n];\r\n\r\n\r\nexport class ItsLayerCollection {\r\n    _map: Map;\r\n    _layers: Array<LayerItsInventory>;\r\n\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap: Map, exclude?: Array<string>) {\r\n\r\n        this._map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this._map.addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers(): LayerItsInventory[] {\r\n        return this._layers;\r\n    }\r\n\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n"]}
\ No newline at end of file
diff --git a/dist/collections/LayerLegend.js b/dist/collections/LayerLegend.js
index 8f50b43..71b8025 100644
--- a/dist/collections/LayerLegend.js
+++ b/dist/collections/LayerLegend.js
@@ -3,12 +3,12 @@
  * Created by gavorhes on 12/16/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var makeGuid_1 = require("../util/makeGuid");
-var mapMove_1 = require("../olHelpers/mapMove");
-var nm = provide_1.default('collections');
-var $ = require("jquery");
-var LayerGroup = /** @class */ (function () {
+const provide_1 = require("../util/provide");
+const makeGuid_1 = require("../util/makeGuid");
+const mapMove_1 = require("../olHelpers/mapMove");
+let nm = provide_1.default('collections');
+const $ = require("jquery");
+class LayerGroup {
     /**
      *
      * @param {object} [groupConfig={}] - group configuration object
@@ -17,7 +17,7 @@ var LayerGroup = /** @class */ (function () {
      * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
      * @param {LayerGroup} [parent=undefined] - the parent group
      */
-    function LayerGroup(groupConfig, parent) {
+    constructor(groupConfig, parent) {
         this.groupLayers = [];
         this.groupLayersLookup = {};
         this.groupGroups = [];
@@ -52,8 +52,8 @@ var LayerGroup = /** @class */ (function () {
      * @param {Array<LayerGroup>} parents parent groups
      * @returns {LayerGroup} the layer group just added
      */
-    LayerGroup.prototype.addGroup = function (groupConfig, parents) {
-        var parent;
+    addGroup(groupConfig, parents) {
+        let parent;
         if (parents.length > 0) {
             parent = parents[parents.length - 1];
         }
@@ -63,8 +63,8 @@ var LayerGroup = /** @class */ (function () {
         /**
          * @type {LayerGroup}
          */
-        var parentGroup = this.allGroupLookup[parent];
-        var newGroup = new LayerGroup(groupConfig, parentGroup);
+        let parentGroup = this.allGroupLookup[parent];
+        let newGroup = new LayerGroup(groupConfig, parentGroup);
         this.allGroupLookup[newGroup.groupId] = newGroup;
         this.allGroupArray.push(newGroup);
         parentGroup.groupGroups.push(newGroup);
@@ -75,14 +75,14 @@ var LayerGroup = /** @class */ (function () {
         }
         parentGroup.itemIdArray.push(newGroup.groupId);
         return newGroup;
-    };
+    }
     /**
      *
      * @param {LayerBase} newLayer the layer to be added
      * @param {Array} parents array
      */
-    LayerGroup.prototype.addLegendLayer = function (newLayer, parents) {
-        var parent;
+    addLegendLayer(newLayer, parents) {
+        let parent;
         if (parents.length > 0) {
             parent = parents[parents.length - 1];
         }
@@ -94,7 +94,7 @@ var LayerGroup = /** @class */ (function () {
         /**
          * @type {LayerGroup}
          */
-        var parentGroup = this.allGroupLookup[parent];
+        let parentGroup = this.allGroupLookup[parent];
         parentGroup.groupLayers.push(newLayer);
         parentGroup.groupLayersLookup[newLayer.id] = newLayer;
         if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
@@ -103,16 +103,16 @@ var LayerGroup = /** @class */ (function () {
         }
         parentGroup.itemIdArray.push(newLayer.id);
         this.layerParentLookup[newLayer.id] = parentGroup;
-    };
-    LayerGroup.prototype.getLegendHtml = function (legendId, options) {
-        var legendHtml = "<ul id=\"" + legendId + "\" class=\"legend-container\">";
-        legendHtml += "<li>" + options.legendTitle + "<input type=\"checkbox\" checked id=\"suppress-by-extent-" + legendId + "\" class=\"suppress-by-extent\">" +
-            ("<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-" + legendId + "\">") +
-            "<span></span>" +
-            "</label></li>";
+    }
+    getLegendHtml(legendId, options) {
+        let legendHtml = `<ul id="${legendId}" class="legend-container">`;
+        legendHtml += `<li>${options.legendTitle}<input type="checkbox" checked id="suppress-by-extent-${legendId}" class="suppress-by-extent">` +
+            `<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-${legendId}">` +
+            `<span></span>` +
+            `</label></li>`;
         legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
         return legendHtml;
-    };
+    }
     /**
      * @param {Array} itemIds the items to process
      * @param {LayerGroup} theGroup new group
@@ -120,36 +120,36 @@ var LayerGroup = /** @class */ (function () {
      * @static
      * @returns {string} html string
      */
-    LayerGroup.prototype._buildLegend = function (itemIds, theGroup, layerDivClasses) {
+    _buildLegend(itemIds, theGroup, layerDivClasses) {
         if (itemIds.length == 0) {
             return '';
         }
-        var theHml = '';
-        var itemId = itemIds[0];
+        let theHml = '';
+        let itemId = itemIds[0];
         if (theGroup.groupLayersLookup[itemId]) {
             /**
              * @type {LayerBase}
              */
-            var lyr = theGroup.groupLayersLookup[itemId];
-            theHml += "<li id=\"" + lyr.id + "-layer-li\" class=\"legend-layer-li " + layerDivClasses.join(' ') + "\">" + lyr.getLegendDiv() + '</li>';
+            let lyr = theGroup.groupLayersLookup[itemId];
+            theHml += `<li id="${lyr.id}-layer-li" class="legend-layer-li ${layerDivClasses.join(' ')}">` + lyr.getLegendDiv() + '</li>';
         }
         else if (theGroup.groupGroupsLookup[itemId]) {
             /**
              * type {LayerGroup}
              */
-            var otherGroup = theGroup.groupGroupsLookup[itemId];
-            theHml += "<li>";
-            theHml += "<div id=\"" + otherGroup.groupId + "-legend-layer-div\" " +
-                ("class=\"legend-layer-group  " + layerDivClasses.join(' ') + "\">");
+            let otherGroup = theGroup.groupGroupsLookup[itemId];
+            theHml += `<li>`;
+            theHml += `<div id="${otherGroup.groupId}-legend-layer-div" ` +
+                `class="legend-layer-group  ${layerDivClasses.join(' ')}">`;
             if (otherGroup.addCheck) {
-                theHml += "<input type=\"checkbox\" checked id=\"" + otherGroup.groupId + "-group-chck\">" +
-                    ("<label for=\"" + otherGroup.groupId + "-group-chck\" title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>");
+                theHml += `<input type="checkbox" checked id="${otherGroup.groupId}-group-chck">` +
+                    `<label for="${otherGroup.groupId}-group-chck" title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
             }
             else {
-                theHml += "<label title=\"Click arrow to expand or collapse\">" + otherGroup.groupName + "</label>";
+                theHml += `<label title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
             }
-            theHml += "<span title=\"Expand/Collapse\" class=\"layer-group-expander";
-            theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + "\">";
+            theHml += `<span title="Expand/Collapse" class="layer-group-expander`;
+            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}">`;
             theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
             theHml += '</span>';
             //parents.push(groupId);
@@ -158,13 +158,12 @@ var LayerGroup = /** @class */ (function () {
             theHml += '</li>';
         }
         return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
-    };
-    return LayerGroup;
-}());
+    }
+}
 /**
  * a wrapper to make a legend
  */
-var LayerLegend = /** @class */ (function () {
+class LayerLegend {
     /**``
      *
      * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
@@ -174,10 +173,8 @@ var LayerLegend = /** @class */ (function () {
      * @param {string} [options.legendTitle=Legend] the legend title
      * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent
      */
-    function LayerLegend(legendItems, divId, options) {
-        if (options === void 0) { options = {}; }
-        for (var _i = 0, legendItems_1 = legendItems; _i < legendItems_1.length; _i++) {
-            var i = legendItems_1[_i];
+    constructor(legendItems, divId, options = {}) {
+        for (let i of legendItems) {
             if (typeof i == 'undefined') {
                 throw 'undefined item passed in array to legend constructor';
             }
@@ -195,19 +192,17 @@ var LayerLegend = /** @class */ (function () {
         this._buildTree(legendItems);
         this.legendId = makeGuid_1.default();
         this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
-        for (var _a = 0, _b = this.layerGroup.allLayerArray; _a < _b.length; _a++) {
-            var l = _b[_a];
+        for (let l of this.layerGroup.allLayerArray) {
             l.applyCollapse();
         }
-        var _this = this;
+        let _this = this;
         //// if legend display is scale dependent, make sure the mapMove object is initialized first
         if (options.scaleDependent) {
             mapMove_1.default.checkInit();
             mapMove_1.default.addCallback(function (ext, zoom, evt) {
                 if (typeof evt == 'undefined' || evt == 'change:resolution') {
-                    for (var _i = 0, _a = this.layerGroup.allLayerArray; _i < _a.length; _i++) {
-                        var lyr = _a[_i];
-                        var $lyrLi = $('#' + lyr.id + '-layer-li');
+                    for (let lyr of this.layerGroup.allLayerArray) {
+                        let $lyrLi = $('#' + lyr.id + '-layer-li');
                         if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
                             $lyrLi.addClass('layer-not-visible');
                         }
@@ -220,7 +215,7 @@ var LayerLegend = /** @class */ (function () {
         }
         // <editor-fold desc="add event listeners">
         this.$divElement.find(".suppress-by-extent").change(function () {
-            var legendLayerLis = $('.legend-layer-li');
+            let legendLayerLis = $('.legend-layer-li');
             if (this.checked) {
                 legendLayerLis.removeClass('layer-force-show');
             }
@@ -229,14 +224,14 @@ var LayerLegend = /** @class */ (function () {
             }
         });
         this.$divElement.find('.legend-check').change(function () {
-            var lyrId = this.id.replace('-legend-layer-check', '');
+            let lyrId = this.id.replace('-legend-layer-check', '');
             _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
         });
         this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
             $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
         });
         this.$divElement.find('.layer-group-expander').click(function () {
-            var $this = $(this);
+            let $this = $(this);
             $this.removeClass('legend-layer-group-initial-collapse');
             $this.siblings('ul').slideToggle();
             if ($this.hasClass('legend-layer-group-collapsed')) {
@@ -256,18 +251,18 @@ var LayerLegend = /** @class */ (function () {
      * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
      * @private
      */
-    LayerLegend.prototype._buildTree = function (legendItems, parents) {
+    _buildTree(legendItems, parents) {
         if (legendItems.length == 0) {
             return;
         }
-        var oneItem = legendItems[0];
+        let oneItem = legendItems[0];
         //reset the parent if the item is in the base array
         if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
             parents = [];
         }
         if (typeof oneItem.groupName !== 'undefined') {
-            var groupItem = legendItems[0];
-            var newGroup = this.layerGroup.addGroup(groupItem, parents);
+            let groupItem = legendItems[0];
+            let newGroup = this.layerGroup.addGroup(groupItem, parents);
             parents.push(newGroup.groupId);
             this._buildTree(oneItem.items, parents);
         }
@@ -275,13 +270,12 @@ var LayerLegend = /** @class */ (function () {
             /**
              * @type {LayerBase}
              */
-            var layerItem = legendItems[0];
+            let layerItem = legendItems[0];
             this.layerGroup.addLegendLayer(layerItem, parents);
         }
         this._buildTree(legendItems.slice(1), parents);
-    };
-    return LayerLegend;
-}());
+    }
+}
 exports.LayerLegend = LayerLegend;
 nm.LayerLegend = LayerLegend;
 exports.default = LayerLegend;
diff --git a/dist/collections/LayerLegend.js.map b/dist/collections/LayerLegend.js.map
index 4958995..0b58ad1 100644
--- a/dist/collections/LayerLegend.js.map
+++ b/dist/collections/LayerLegend.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerLegend.js","sourceRoot":"","sources":["../../src/collections/LayerLegend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\nimport {LayerBase} from \"../layers\";\r\n\r\nexport interface iLegendItem{\r\n    groupName: string;\r\n    collapse?: boolean;\r\n    addCheck?: boolean;\r\n    items: Array<iLegendItem|LayerBase>\r\n}\r\n\r\nexport interface iLegendOptions{\r\n    layerDivClasses?: string[]\r\n    legendTitle?: string\r\n    scaleDependent?: boolean\r\n}\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?: iLegendItem, parent?: LayerGroup) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig: iLegendItem, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer: LayerBase, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n\r\n\r\n    getLegendHtml(legendId: string, options: iLegendOptions) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds: string[], theGroup: LayerGroup, layerDivClasses: string[]): string {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nexport class LayerLegend {\r\n\r\n    $divElement: JQuery;\r\n    _legendItems: Array<iLegendItem|LayerBase>;\r\n    layerGroup: any;\r\n    legendId: string;\r\n\r\n    /**``\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems: Array<iLegendItem|LayerBase>, divId: string, options: iLegendOptions = {}) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if ((this as HTMLInputElement).checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = (this as HTMLInputElement).checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', (this as HTMLInputElement).checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems: Array<iLegendItem|LayerBase>, parents?: string[]) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if ((this._legendItems as Array<any>).indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof (oneItem as iLegendItem).groupName !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree((oneItem as iLegendItem).items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem: LayerBase = legendItems[0] as LayerBase;\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerLegend.js","sourceRoot":"","sources":["../../src/collections/LayerLegend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\n\r\nlet nm = provide('collections');\r\nimport $ = require('jquery');\r\nimport {LayerBase} from \"../layers\";\r\n\r\nexport interface iLegendItem{\r\n    groupName: string;\r\n    collapse?: boolean;\r\n    addCheck?: boolean;\r\n    items: Array<iLegendItem|LayerBase>\r\n}\r\n\r\nexport interface iLegendOptions{\r\n    layerDivClasses?: string[]\r\n    legendTitle?: string\r\n    scaleDependent?: boolean\r\n}\r\n\r\nclass LayerGroup {\r\n    groupLayers: any;\r\n    groupLayersLookup: any;\r\n    groupGroupsLookup: any;\r\n    groupGroups: any;\r\n    itemIdArray: any;\r\n    groupId: any;\r\n    groupName: any;\r\n    allLayerArray: any;\r\n    parent: any;\r\n    allGroupArray: any;\r\n    allGroupLookup: any;\r\n    allLayerLookup: any;\r\n    collapse: boolean;\r\n    addCheck: boolean;\r\n    layerParentLookup: any;\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig?: iLegendItem, parent?: LayerGroup) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig: iLegendItem, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer: LayerBase, parents: string[]) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n\r\n\r\n    getLegendHtml(legendId: string, options: iLegendOptions) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds: string[], theGroup: LayerGroup, layerDivClasses: string[]): string {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nexport class LayerLegend {\r\n\r\n    $divElement: JQuery;\r\n    _legendItems: Array<iLegendItem|LayerBase>;\r\n    layerGroup: any;\r\n    legendId: string;\r\n\r\n    /**``\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {boolean} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems: Array<iLegendItem|LayerBase>, divId: string, options: iLegendOptions = {}) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if ((this as HTMLInputElement).checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = (this as HTMLInputElement).checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', (this as HTMLInputElement).checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems: Array<iLegendItem|LayerBase>, parents?: string[]) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if ((this._legendItems as Array<any>).indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof (oneItem as iLegendItem).groupName !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree((oneItem as iLegendItem).items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem: LayerBase = legendItems[0] as LayerBase;\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n"]}
\ No newline at end of file
diff --git a/dist/collections/Sliders.js b/dist/collections/Sliders.js
index 8b0cc76..d09b7e1 100644
--- a/dist/collections/Sliders.js
+++ b/dist/collections/Sliders.js
@@ -3,32 +3,30 @@
  * Created by gavorhes on 12/10/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var nm = provide_1.default('collections');
-var TipPresets = /** @class */ (function () {
-    function TipPresets(conf) {
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+let nm = provide_1.default('collections');
+class TipPresets {
+    constructor(conf) {
         this.label = conf.label;
         this.presets = conf.presets;
         this.domId = this.label.replace(/ /g, '').toLowerCase();
-        var theSum = 0;
-        for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {
-            var pr = _a[_i];
+        let theSum = 0;
+        for (let pr of this.presets) {
             theSum += pr.value;
         }
         if (theSum != 100) {
             throw 'preset sum does note equal 100';
         }
     }
-    return TipPresets;
-}());
-var _Slider = /** @class */ (function () {
+}
+class _Slider {
     /**
      * Slider constructor
      * @param sliderConfig - the configuration
 
      */
-    function _Slider(sliderConfig) {
+    constructor(sliderConfig) {
         this._dropdownSelection = null;
         this._weight = null;
         this.name = sliderConfig.label;
@@ -43,42 +41,42 @@ var _Slider = /** @class */ (function () {
         this.chk = null;
         this.atMin = false;
         this.atMax = false;
-        var sel = "<select class=\"" + (sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select') + "\" id=\"" + this.domId + "_chg\">";
-        for (var i = 0; i < sliderConfig.yearOptions.length; i++) {
-            var itm = sliderConfig.yearOptions[i];
-            sel += "<option value=\"" + itm.column + "\">" + itm.label + "</option>";
+        let sel = `<select class="${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}" id="${this.domId}_chg">`;
+        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {
+            let itm = sliderConfig.yearOptions[i];
+            sel += `<option value="${itm.column}">${itm.label}</option>`;
         }
         sel += '</select>';
         this.selectedParamDefault = this.selectedParam;
         this.html = '<div class="slider-div">' +
-            ("<label for=\"" + this.domId + "_chk\" class=\"slider-label\">" + this.name + "</label>") +
-            sel + "<br>" +
-            ("<input id=\"" + this.domId + "_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">") +
-            ("<label id=\"" + this.domId + "_low\" class=\"low-high\"></label>") +
-            ("<input id=\"" + this.domId + "\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">") +
-            ("<label id=\"" + this.domId + "_high\" class=\"low-high\"></label>") +
-            ("<label id=\"" + this.domId + "_lbl\" for=\"" + this.domId + "\" class=\"percent-label\"></label></div>");
+            `<label for="${this.domId}_chk" class="slider-label">${this.name}</label>` +
+            sel + `<br>` +
+            `<input id="${this.domId}_chk" type="checkbox" title="Lock/Unlock Slider">` +
+            `<label id="${this.domId}_low" class="low-high"></label>` +
+            `<input id="${this.domId}" type="range" value="50" min="0" max="100" step="0.1">` +
+            `<label id="${this.domId}_high" class="low-high"></label>` +
+            `<label id="${this.domId}_lbl" for="${this.domId}" class="percent-label"></label></div>`;
     }
     /**
      * add html to dom
      * @param {jQuery} $container - container element
      */
-    _Slider.prototype.addToDom = function ($container) {
+    addToDom($container) {
         $container.append(this.html);
-        this.labelLow = $("#" + this.domId + "_low");
-        this.labelHigh = $("#" + this.domId + "_high");
-        this.labelVal = $("#" + this.domId + "_lbl");
-        this.slider = $("#" + this.domId);
-        this.selectionBox = $("#" + this.domId + "_chg");
-        this.chk = $("#" + this.domId + "_chk");
-    };
+        this.labelLow = $(`#${this.domId}_low`);
+        this.labelHigh = $(`#${this.domId}_high`);
+        this.labelVal = $(`#${this.domId}_lbl`);
+        this.slider = $(`#${this.domId}`);
+        this.selectionBox = $(`#${this.domId}_chg`);
+        this.chk = $(`#${this.domId}_chk`);
+    }
     /**
      * increment the slider
      * @param {number} delta change delta
      * @returns {number} the remainder not able to be allocated to this slider
      */
-    _Slider.prototype.increment = function (delta) {
-        var remainder = 0;
+    increment(delta) {
+        let remainder = 0;
         delta = Number(delta.toFixed(1));
         this._weight += delta;
         if (this._weight < this._min) {
@@ -98,13 +96,13 @@ var _Slider = /** @class */ (function () {
         this.slider.val(this._weight.toFixed(1));
         this.labelVal.html(this._weight.toFixed(1) + '%');
         return remainder;
-    };
+    }
     /**
      * set the value and drop down
      * @param {number} newVal the new value
      * @param {string} selectedParam the selected parameter
      */
-    _Slider.prototype.setValAndDropDown = function (newVal, selectedParam) {
+    setValAndDropDown(newVal, selectedParam) {
         this.min = 0;
         this.max = 100;
         this.weight = newVal;
@@ -112,114 +110,97 @@ var _Slider = /** @class */ (function () {
         this.selectionBox.val(selectedParam);
         this.selectedParam = selectedParam;
         this.locked = true;
-    };
-    Object.defineProperty(_Slider.prototype, "locked", {
-        /**
-         *
-         * @returns {boolean} if locked
-         */
-        get: function () {
-            return this._locked;
-        },
-        /**
-         *
-         * @param {boolean} val if locked
-         */
-        set: function (val) {
-            this._locked = val;
-            this.slider.prop('disabled', this._locked);
-            this.selectionBox.prop('disabled', this._locked);
-            this.chk.prop('checked', !this._locked);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "min", {
-        /**
-         *
-         * @returns {number} the minimum
-         */
-        get: function () {
-            return this._min;
-        },
-        /**
-         *
-         * @param {number} newVal new minimum
-         */
-        set: function (newVal) {
-            this._min = Number(newVal.toFixed(1));
-            if (this._min < 0) {
-                this._min = 0;
-            }
-            this.labelLow.html(this._min.toFixed(1));
-            this.slider.attr('min', this._min.toFixed(1));
-            this.atMin = this._weight == this._min;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "max", {
-        /**
-         *
-         * @returns {number} the maximum
-         */
-        get: function () {
-            return this._max;
-        },
-        /**
-         *
-         * @param {number} newVal the maximum
-         */
-        set: function (newVal) {
-            this._max = Number(newVal.toFixed(1));
-            if (this._max > 100) {
-                this._max = 100.0;
-            }
-            this.labelHigh.html(this._max.toFixed(1));
-            this.slider.attr('max', this._max.toFixed(1));
-            this.atMax = this._weight == this._max;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(_Slider.prototype, "weight", {
-        /**
-         *
-         * @returns {number} the weight
-         */
-        get: function () {
-            return this._weight;
-        },
-        /**
-         *
-         * @param {number} newVal the weight
-         */
-        set: function (newVal) {
-            this._weight = Number(newVal.toFixed(1));
-            this.labelVal.html(this._weight.toFixed(1) + '%');
-            if (this._weight <= this._min) {
-                this.atMin = true;
-                this.atMax = false;
-            }
-            else if (this._weight >= this._max) {
-                this.atMin = false;
-                this.atMax = true;
-            }
-            else {
-                this.atMin = false;
-                this.atMax = false;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return _Slider;
-}());
+    }
+    /**
+     *
+     * @returns {boolean} if locked
+     */
+    get locked() {
+        return this._locked;
+    }
+    /**
+     *
+     * @param {boolean} val if locked
+     */
+    set locked(val) {
+        this._locked = val;
+        this.slider.prop('disabled', this._locked);
+        this.selectionBox.prop('disabled', this._locked);
+        this.chk.prop('checked', !this._locked);
+    }
+    /**
+     *
+     * @returns {number} the minimum
+     */
+    get min() {
+        return this._min;
+    }
+    /**
+     *
+     * @param {number} newVal new minimum
+     */
+    set min(newVal) {
+        this._min = Number(newVal.toFixed(1));
+        if (this._min < 0) {
+            this._min = 0;
+        }
+        this.labelLow.html(this._min.toFixed(1));
+        this.slider.attr('min', this._min.toFixed(1));
+        this.atMin = this._weight == this._min;
+    }
+    /**
+     *
+     * @returns {number} the maximum
+     */
+    get max() {
+        return this._max;
+    }
+    /**
+     *
+     * @param {number} newVal the maximum
+     */
+    set max(newVal) {
+        this._max = Number(newVal.toFixed(1));
+        if (this._max > 100) {
+            this._max = 100.0;
+        }
+        this.labelHigh.html(this._max.toFixed(1));
+        this.slider.attr('max', this._max.toFixed(1));
+        this.atMax = this._weight == this._max;
+    }
+    /**
+     *
+     * @returns {number} the weight
+     */
+    get weight() {
+        return this._weight;
+    }
+    /**
+     *
+     * @param {number} newVal the weight
+     */
+    set weight(newVal) {
+        this._weight = Number(newVal.toFixed(1));
+        this.labelVal.html(this._weight.toFixed(1) + '%');
+        if (this._weight <= this._min) {
+            this.atMin = true;
+            this.atMax = false;
+        }
+        else if (this._weight >= this._max) {
+            this.atMin = false;
+            this.atMax = true;
+        }
+        else {
+            this.atMin = false;
+            this.atMax = false;
+        }
+    }
+}
 nm._Slider = _Slider;
 /**
  * class to keep track of the sliders
  */
-var TipSliders = /** @class */ (function () {
+class TipSliders {
     /**
      *
      * @param sliderConfigs
@@ -230,32 +211,31 @@ var TipSliders = /** @class */ (function () {
      * @param versionSelector
      * @param chgCallback
      */
-    function TipSliders(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) {
-        var _this = this;
+    constructor(sliderConfigs, presetConfig, divId, presetSelector, regionSelector, versionSelector, chgCallback) {
         this.resetting = false;
         this.reservedPercent = 0.0;
         this.$container = $('#' + divId);
         this.$container.addClass('slider-container');
-        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : function () { };
+        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => { };
         this._$presetSelector = presetSelector;
         this._$regionSelector = regionSelector;
         this._$versionSelector = versionSelector;
         this._sliderList = [];
         this._sliderLookup = {};
-        for (var i = 0; i < sliderConfigs.length; i++) {
-            var sld = new _Slider(sliderConfigs[i]);
+        for (let i = 0; i < sliderConfigs.length; i++) {
+            let sld = new _Slider(sliderConfigs[i]);
             this._sliderList.push(sld);
             this._sliderLookup[sld.domId] = sld;
             sld.addToDom(this.$container);
         }
         this._presetArray = [];
         this._presetLookup = {};
-        for (var i = 0; i < presetConfig.length; i++) {
-            var preset = new TipPresets(presetConfig[i]);
-            var idx = (i + 1).toFixed();
+        for (let i = 0; i < presetConfig.length; i++) {
+            let preset = new TipPresets(presetConfig[i]);
+            let idx = (i + 1).toFixed();
             this._presetLookup[idx] = preset;
             this._presetArray.push(preset);
-            this._$presetSelector.append("<option value=\"" + idx + "\">" + preset.label + "</option>");
+            this._$presetSelector.append(`<option value="${idx}">${preset.label}</option>`);
         }
         this._lockedList = [];
         this._inRangeList = [];
@@ -264,54 +244,50 @@ var TipSliders = /** @class */ (function () {
         this.lockedCount = 10;
         this.notLockedCount = 0;
         this._splitSliderArray();
-        this._$presetSelector.change(function () {
-            _this.setPresetValues();
-            _this._runChangedCallback();
+        this._$presetSelector.change(() => {
+            this.setPresetValues();
+            this._runChangedCallback();
         });
-        this._$regionSelector.change(function () {
-            _this._runChangedCallback();
+        this._$regionSelector.change(() => {
+            this._runChangedCallback();
         });
-        this._$versionSelector.change(function () {
-            _this._runChangedCallback();
+        this._$versionSelector.change(() => {
+            this._runChangedCallback();
         });
         this._$presetSelector.trigger('change');
         this._addEventListeners();
     }
-    TipSliders.prototype._runChangedCallback = function () {
+    _runChangedCallback() {
         this._changedCallback(this.paramWeightsRegionVersion);
-    };
-    Object.defineProperty(TipSliders.prototype, "changedCallback", {
-        get: function () {
-            return this._changedCallback;
-        },
-        set: function (chg) {
-            this._changedCallback = chg;
-            this._runChangedCallback();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    TipSliders.prototype.setPresetValues = function () {
-        var idx = this._$presetSelector.val() || '1';
-        var thePreset = this._presetLookup[idx];
-        for (var i = 0; i < thePreset.presets.length; i++) {
-            var presetValues = thePreset.presets[i];
-            var theSlider = this._sliderList[i];
+    }
+    get changedCallback() {
+        return this._changedCallback;
+    }
+    set changedCallback(chg) {
+        this._changedCallback = chg;
+        this._runChangedCallback();
+    }
+    setPresetValues() {
+        let idx = this._$presetSelector.val() || '1';
+        let thePreset = this._presetLookup[idx];
+        for (let i = 0; i < thePreset.presets.length; i++) {
+            let presetValues = thePreset.presets[i];
+            let theSlider = this._sliderList[i];
             theSlider.locked = true;
             theSlider.setValAndDropDown(presetValues.value, presetValues.column);
         }
-    };
+    }
     /**
      * split array into subarrays holding the sliders
      * @private
      */
-    TipSliders.prototype._splitSliderArray = function () {
+    _splitSliderArray() {
         this._lockedList = [];
         this._inRangeList = [];
         this._atMinList = [];
         this._atMaxList = [];
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
             if (sld.locked) {
                 this._lockedList.push(sld);
             }
@@ -327,30 +303,30 @@ var TipSliders = /** @class */ (function () {
         }
         this.lockedCount = this._lockedList.length;
         this.notLockedCount = this._sliderList.length - this.lockedCount;
-    };
+    }
     /**
      * handle remainder, recursive to take care of min max overshoots
      * @param {number} remain the remainder
      * @param {string} skipDomId - this dom id
      * @private
      */
-    TipSliders.prototype._handleRemainder = function (remain, skipDomId) {
+    _handleRemainder(remain, skipDomId) {
         remain = Number(remain.toFixed(1));
         if (remain == 0) {
             return;
         }
         this._splitSliderArray();
-        var canChangeArray = [];
-        for (var i = 0; i < this._inRangeList.length; i++) {
-            var sld = this._inRangeList[i];
+        let canChangeArray = [];
+        for (let i = 0; i < this._inRangeList.length; i++) {
+            let sld = this._inRangeList[i];
             if (sld.domId == skipDomId) {
                 continue;
             }
             canChangeArray.push(sld);
         }
         if (remain > 0) {
-            for (var i = 0; i < this._atMaxList.length; i++) {
-                var sld = this._atMaxList[i];
+            for (let i = 0; i < this._atMaxList.length; i++) {
+                let sld = this._atMaxList[i];
                 if (sld.domId == skipDomId) {
                     continue;
                 }
@@ -358,8 +334,8 @@ var TipSliders = /** @class */ (function () {
             }
         }
         else {
-            for (var i = 0; i < this._atMinList.length; i++) {
-                var sld = this._atMinList[i];
+            for (let i = 0; i < this._atMinList.length; i++) {
+                let sld = this._atMinList[i];
                 if (sld.domId == skipDomId) {
                     continue;
                 }
@@ -369,72 +345,72 @@ var TipSliders = /** @class */ (function () {
         if (canChangeArray.length == 0) {
             return;
         }
-        var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
-        var newRemainder = 0;
-        for (var i = 0; i < canChangeArray.length; i++) {
+        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
+        let newRemainder = 0;
+        for (let i = 0; i < canChangeArray.length; i++) {
             newRemainder += canChangeArray[i].increment(inc);
         }
         this._handleRemainder(newRemainder, skipDomId);
-    };
+    }
     /**
      *
      * @param {object} keyValList key and value list
      */
-    TipSliders.prototype.setValues = function (keyValList) {
+    setValues(keyValList) {
         this.resetting = true;
-        for (var k in keyValList) {
+        for (let k in keyValList) {
             if (keyValList.hasOwnProperty(k)) {
                 this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
             }
         }
         this.resetting = false;
-    };
+    }
     /**
      * get the weight sum
      * @returns {number} the weight sum
      */
-    TipSliders.prototype.getSum = function () {
-        var total = 0;
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
+    getSum() {
+        let total = 0;
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
             total += Number(sld.weight.toFixed(1));
         }
         return total;
-    };
+    }
     /**
      * get the parameter weights
      * @returns {object} lookup with parameter weights
      */
-    TipSliders.prototype.getParams = function () {
-        var paramWeights = {};
-        for (var i = 0; i < this._sliderList.length; i++) {
-            var sld = this._sliderList[i];
+    getParams() {
+        let paramWeights = {};
+        for (let i = 0; i < this._sliderList.length; i++) {
+            let sld = this._sliderList[i];
             paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
         }
         return paramWeights;
-    };
-    TipSliders.prototype._addEventListeners = function () {
-        var ___this = this;
+    }
+    _addEventListeners() {
+        let ___this = this;
         //change function
         this.$container.find('input[type="range"]').change(function () {
             if (___this.resetting) {
                 return;
             }
-            var $this = $(this);
-            var domId = this['id'];
-            var sldr = ___this._sliderLookup[domId];
-            var newValue = parseFloat($this.val());
-            var oldValue = sldr.weight;
-            var diff = newValue - oldValue;
+            let $this = $(this);
+            let domId = this['id'];
+            let sldr = ___this._sliderLookup[domId];
+            let newValue = parseFloat($this.val());
+            let oldValue = sldr.weight;
+            let diff = newValue - oldValue;
             diff = Number(diff.toFixed(1));
             sldr.weight = Number(newValue.toFixed(1));
             ___this._handleRemainder(diff, domId);
             //cleanup, make sure the sum is still 100
-            var sum = Number(___this.getSum().toFixed(1));
+            let sum = Number(___this.getSum().toFixed(1));
             if (sum > 100) {
                 loop1: while (true) {
-                    for (var i = 0; i < ___this._sliderList.length; i++) {
-                        var sld = ___this._sliderList[i];
+                    for (let i = 0; i < ___this._sliderList.length; i++) {
+                        let sld = ___this._sliderList[i];
                         if (sld.domId == domId || sld.locked || sld.atMin) {
                             continue;
                         }
@@ -448,8 +424,8 @@ var TipSliders = /** @class */ (function () {
             }
             else if (sum < 100) {
                 loop1: while (true) {
-                    for (var i = 0; i < ___this._sliderList.length; i++) {
-                        var sld = ___this._sliderList[i];
+                    for (let i = 0; i < ___this._sliderList.length; i++) {
+                        let sld = ___this._sliderList[i];
                         if (sld.domId == domId || sld.locked || sld.atMax) {
                             continue;
                         }
@@ -475,13 +451,13 @@ var TipSliders = /** @class */ (function () {
         });
         //lock the slider and update the reserved percent
         this.$container.find('input[type="checkbox"]').change(function () {
-            var domEl = this;
+            let domEl = this;
             ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
             ___this.reservedPercent = 0.0;
             ___this.notLockedCount = 0;
-            var notLockedSliders = [];
-            for (var i = 0; i < ___this._sliderList.length; i++) {
-                var sld = ___this._sliderList[i];
+            let notLockedSliders = [];
+            for (let i = 0; i < ___this._sliderList.length; i++) {
+                let sld = ___this._sliderList[i];
                 if (sld.locked) {
                     ___this.reservedPercent += sld.weight;
                     continue;
@@ -489,8 +465,8 @@ var TipSliders = /** @class */ (function () {
                 notLockedSliders.push(sld);
                 ___this.notLockedCount++;
             }
-            for (var i = 0; i < ___this._sliderList.length; i++) {
-                var sld = ___this._sliderList[i];
+            for (let i = 0; i < ___this._sliderList.length; i++) {
+                let sld = ___this._sliderList[i];
                 if (sld.locked) {
                     continue;
                 }
@@ -500,22 +476,17 @@ var TipSliders = /** @class */ (function () {
                 notLockedSliders[0].min = notLockedSliders[0].weight;
             }
             else {
-                for (var i = 0; i < notLockedSliders.length; i++) {
+                for (let i = 0; i < notLockedSliders.length; i++) {
                     notLockedSliders[i].min = 0;
                 }
             }
         });
-    };
-    Object.defineProperty(TipSliders.prototype, "paramWeightsRegionVersion", {
-        get: function () {
-            return { paramWeights: this.getParams(),
-                region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return TipSliders;
-}());
+    }
+    get paramWeightsRegionVersion() {
+        return { paramWeights: this.getParams(),
+            region: this._$regionSelector.val(), mmVersion: this._$versionSelector.val() };
+    }
+}
 exports.TipSliders = TipSliders;
 nm.Sliders = TipSliders;
 exports.default = TipSliders;
diff --git a/dist/collections/Sliders.js.map b/dist/collections/Sliders.js.map
index 63218f3..ce4da3f 100644
--- a/dist/collections/Sliders.js.map
+++ b/dist/collections/Sliders.js.map
@@ -1 +1 @@
-{"version":3,"file":"Sliders.js","sourceRoot":"","sources":["../../src/collections/Sliders.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections');\r\n\r\nexport interface TipSliderConfig {\r\n    label: string;\r\n    yearOptions: Array<{column: string, label: string}>\r\n}\r\n\r\nexport interface TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>\r\n}\r\n\r\nexport interface ChangeResponse{\r\n    paramWeights: Object;\r\n    region: string;\r\n    mmVersion: string;\r\n}\r\n\r\nexport interface ChangeCallback{\r\n    (chg: ChangeResponse): any\r\n}\r\n\r\n\r\nclass TipPresets implements TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>;\r\n    domId: string;\r\n\r\n    constructor(conf: TipPresetConfig) {\r\n        this.label = conf.label;\r\n        this.presets = conf.presets;\r\n        this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n\r\n        let theSum = 0;\r\n\r\n        for (let pr of this.presets){\r\n            theSum += pr.value;\r\n        }\r\n\r\n        if (theSum != 100){\r\n            throw 'preset sum does note equal 100';\r\n        }\r\n    }\r\n}\r\n\r\n\r\nclass _Slider {\r\n    _min: number;\r\n    _max: number;\r\n    _locked: boolean;\r\n    atMin: boolean;\r\n    atMax: boolean;\r\n    _weightDefault: number;\r\n    _weight: number;\r\n    html: string;\r\n    domId: string;\r\n    name: string;\r\n\r\n    labelLow: JQuery;\r\n    labelHigh: JQuery;\r\n    labelVal: JQuery;\r\n    slider: JQuery;\r\n    selectionBox: JQuery;\r\n    chk: JQuery;\r\n\r\n    selectedParam: any;\r\n    selectedParamDefault: any;\r\n    _dropdownSelection: string;\r\n\r\n    /**\r\n     * Slider constructor\r\n     * @param sliderConfig - the configuration\r\n\r\n     */\r\n    constructor(sliderConfig: TipSliderConfig) {\r\n        this._dropdownSelection = null;\r\n        this._weight = null;\r\n        this.name = sliderConfig.label;\r\n        this.domId = this.name.toLowerCase().replace(/ /g, '-');\r\n\r\n        this._locked = false;\r\n\r\n        this._min = 0.0;\r\n        this._max = 100;\r\n\r\n        this.labelLow = null;\r\n        this.labelHigh = null;\r\n        this.labelVal = null;\r\n        this.slider = null;\r\n        this.chk = null;\r\n\r\n        this.atMin = false;\r\n        this.atMax = false;\r\n\r\n\r\n        let sel = `<select class=\"${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}\" id=\"${this.domId}_chg\">`;\r\n\r\n        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n            let itm = sliderConfig.yearOptions[i];\r\n            sel += `<option value=\"${itm.column}\">${itm.label}</option>`;\r\n        }\r\n        sel += '</select>';\r\n\r\n        this.selectedParamDefault = this.selectedParam;\r\n\r\n        this.html = '<div class=\"slider-div\">' +\r\n            `<label for=\"${this.domId}_chk\" class=\"slider-label\">${this.name}</label>` +\r\n            sel + `<br>` +\r\n            `<input id=\"${this.domId}_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">` +\r\n            `<label id=\"${this.domId}_low\" class=\"low-high\"></label>` +\r\n            `<input id=\"${this.domId}\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">` +\r\n            `<label id=\"${this.domId}_high\" class=\"low-high\"></label>` +\r\n            `<label id=\"${this.domId}_lbl\" for=\"${this.domId}\" class=\"percent-label\"></label></div>`;\r\n    }\r\n\r\n    /**\r\n     * add html to dom\r\n     * @param {jQuery} $container - container element\r\n     */\r\n    addToDom($container: JQuery) {\r\n        $container.append(this.html);\r\n        this.labelLow = $(`#${this.domId}_low`);\r\n        this.labelHigh = $(`#${this.domId}_high`);\r\n        this.labelVal = $(`#${this.domId}_lbl`);\r\n        this.slider = $(`#${this.domId}`);\r\n        this.selectionBox = $(`#${this.domId}_chg`);\r\n        this.chk = $(`#${this.domId}_chk`);\r\n    }\r\n\r\n    /**\r\n     * increment the slider\r\n     * @param {number} delta change delta\r\n     * @returns {number} the remainder not able to be allocated to this slider\r\n     */\r\n    increment(delta: number): number {\r\n        let remainder = 0;\r\n        delta = Number(delta.toFixed(1));\r\n\r\n        this._weight += delta;\r\n        if (this._weight < this._min) {\r\n            remainder = this._min - this._weight;\r\n            this._weight = this._min;\r\n            this.atMin = true;\r\n        } else if (this._weight > this._max) {\r\n            remainder = this._max - this._weight;\r\n            this._weight = this._max;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n\r\n        this.slider.val(this._weight.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n\r\n        return remainder;\r\n    }\r\n\r\n    /**\r\n     * set the value and drop down\r\n     * @param {number} newVal the new value\r\n     * @param {string} selectedParam the selected parameter\r\n     */\r\n    setValAndDropDown(newVal: number, selectedParam: string) {\r\n        this.min = 0;\r\n        this.max = 100;\r\n        this.weight = newVal;\r\n        this.slider.val(newVal.toFixed(1));\r\n        this.selectionBox.val(selectedParam);\r\n        this.selectedParam = selectedParam;\r\n        this.locked = true;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {boolean} if locked\r\n     */\r\n    get locked() {\r\n        return this._locked;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {boolean} val if locked\r\n     */\r\n    set locked(val) {\r\n        this._locked = val;\r\n        this.slider.prop('disabled', this._locked);\r\n        this.selectionBox.prop('disabled', this._locked);\r\n        this.chk.prop('checked', !this._locked);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the minimum\r\n     */\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal new minimum\r\n     */\r\n    set min(newVal) {\r\n        this._min = Number(newVal.toFixed(1));\r\n        if (this._min < 0) {\r\n            this._min = 0;\r\n        }\r\n        this.labelLow.html(this._min.toFixed(1));\r\n        this.slider.attr('min', this._min.toFixed(1));\r\n        this.atMin = this._weight == this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the maximum\r\n     */\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the maximum\r\n     */\r\n    set max(newVal) {\r\n        this._max = Number(newVal.toFixed(1));\r\n        if (this._max > 100) {\r\n            this._max = 100.0;\r\n        }\r\n        this.labelHigh.html(this._max.toFixed(1));\r\n        this.slider.attr('max', this._max.toFixed(1));\r\n        this.atMax = this._weight == this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the weight\r\n     */\r\n    get weight() {\r\n        return this._weight;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the weight\r\n     */\r\n    set weight(newVal) {\r\n        this._weight = Number(newVal.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n        if (this._weight <= this._min) {\r\n            this.atMin = true;\r\n            this.atMax = false;\r\n        } else if (this._weight >= this._max) {\r\n            this.atMin = false;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n    }\r\n}\r\n\r\nnm._Slider = _Slider;\r\n\r\n\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nexport class TipSliders {\r\n    $container: JQuery;\r\n    reservedPercent: number;\r\n    lockedCount: number;\r\n    notLockedCount: number;\r\n    private _sliderList: Array<_Slider>;\r\n    private _sliderLookup: {[s: string]: _Slider};\r\n    private resetting: boolean;\r\n    private _changedCallback: ChangeCallback;\r\n\r\n    private _lockedList: Array<_Slider>;\r\n    private _inRangeList: Array<_Slider>;\r\n    private _atMinList: Array<_Slider>;\r\n    private _atMaxList: Array<_Slider>;\r\n\r\n    private _presetArray: Array<TipPresets>;\r\n    private _presetLookup: {[s: string]: TipPresets};\r\n\r\n    private _$presetSelector: JQuery;\r\n    private _$regionSelector: JQuery;\r\n    private _$versionSelector: JQuery;\r\n\r\n    /**\r\n     *\r\n     * @param sliderConfigs\r\n     * @param presetConfig\r\n     * @param divId\r\n     * @param presetSelector\r\n     * @param regionSelector\r\n     * @param versionSelector\r\n     * @param chgCallback\r\n     */\r\n    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,\r\n                divId: string, presetSelector: JQuery, regionSelector: JQuery, versionSelector: JQuery,\r\n                chgCallback?: ChangeCallback) {\r\n\r\n        this.resetting = false;\r\n        this.reservedPercent = 0.0;\r\n        this.$container = $('#' + divId);\r\n        this.$container.addClass('slider-container');\r\n\r\n        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};\r\n\r\n        this._$presetSelector = presetSelector;\r\n        this._$regionSelector = regionSelector;\r\n        this._$versionSelector = versionSelector;\r\n\r\n        this._sliderList = [];\r\n        this._sliderLookup = {};\r\n\r\n        for (let i = 0; i < sliderConfigs.length; i++) {\r\n            let sld = new _Slider(sliderConfigs[i]);\r\n            this._sliderList.push(sld);\r\n            this._sliderLookup[sld.domId] = sld;\r\n            sld.addToDom(this.$container);\r\n        }\r\n\r\n        this._presetArray = [];\r\n        this._presetLookup = {};\r\n\r\n        for (let i = 0; i < presetConfig.length; i++) {\r\n            let preset = new TipPresets(presetConfig[i]);\r\n\r\n            let idx = (i + 1).toFixed();\r\n\r\n            this._presetLookup[idx] = preset;\r\n            this._presetArray.push(preset);\r\n            this._$presetSelector.append(`<option value=\"${idx}\">${preset.label}</option>`);\r\n        }\r\n\r\n\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        this.lockedCount = 10;\r\n        this.notLockedCount = 0;\r\n\r\n        this._splitSliderArray();\r\n\r\n\r\n        this._$presetSelector.change(() => {\r\n            this.setPresetValues();\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$regionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$versionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$presetSelector.trigger('change');\r\n\r\n        this._addEventListeners();\r\n    }\r\n\r\n    _runChangedCallback(){\r\n        this._changedCallback(this.paramWeightsRegionVersion);\r\n    }\r\n\r\n    get changedCallback(): ChangeCallback{\r\n        return this._changedCallback\r\n    }\r\n\r\n    set changedCallback(chg: ChangeCallback){\r\n        this._changedCallback = chg;\r\n        this._runChangedCallback();\r\n    }\r\n\r\n    setPresetValues() {\r\n        let idx = this._$presetSelector.val() || '1';\r\n\r\n        let thePreset = this._presetLookup[idx as string];\r\n\r\n        for (let i = 0; i < thePreset.presets.length; i++) {\r\n            let presetValues = thePreset.presets[i];\r\n            let theSlider = this._sliderList[i];\r\n\r\n            theSlider.locked = true;\r\n            theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * split array into subarrays holding the sliders\r\n     * @private\r\n     */\r\n    _splitSliderArray() {\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n\r\n            if (sld.locked) {\r\n                this._lockedList.push(sld);\r\n            } else if (sld.atMin) {\r\n                this._atMinList.push(sld);\r\n            } else if (sld.atMax) {\r\n                this._atMaxList.push(sld);\r\n            } else {\r\n                this._inRangeList.push(sld);\r\n            }\r\n        }\r\n        this.lockedCount = this._lockedList.length;\r\n        this.notLockedCount = this._sliderList.length - this.lockedCount;\r\n    }\r\n\r\n    /**\r\n     * handle remainder, recursive to take care of min max overshoots\r\n     * @param {number} remain the remainder\r\n     * @param {string} skipDomId - this dom id\r\n     * @private\r\n     */\r\n    _handleRemainder(remain: number, skipDomId: string) {\r\n\r\n        remain = Number(remain.toFixed(1));\r\n        if (remain == 0) {\r\n            return;\r\n        }\r\n\r\n        this._splitSliderArray();\r\n\r\n        let canChangeArray = [];\r\n        for (let i = 0; i < this._inRangeList.length; i++) {\r\n            let sld = this._inRangeList[i];\r\n            if (sld.domId == skipDomId) {\r\n                continue;\r\n            }\r\n            canChangeArray.push(sld);\r\n        }\r\n\r\n        if (remain > 0) {\r\n            for (let i = 0; i < this._atMaxList.length; i++) {\r\n                let sld = this._atMaxList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < this._atMinList.length; i++) {\r\n                let sld = this._atMinList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        }\r\n\r\n        if (canChangeArray.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n\r\n        let newRemainder = 0;\r\n        for (let i = 0; i < canChangeArray.length; i++) {\r\n            newRemainder += canChangeArray[i].increment(inc);\r\n        }\r\n\r\n        this._handleRemainder(newRemainder, skipDomId);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} keyValList key and value list\r\n     */\r\n    setValues(keyValList: {[s:string]: [number, string]}) {\r\n        this.resetting = true;\r\n        for (let k in keyValList) {\r\n            if (keyValList.hasOwnProperty(k)) {\r\n                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);\r\n            }\r\n        }\r\n        this.resetting = false;\r\n    }\r\n\r\n    /**\r\n     * get the weight sum\r\n     * @returns {number} the weight sum\r\n     */\r\n    getSum() {\r\n        let total = 0;\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            total += Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return total;\r\n    }\r\n\r\n    /**\r\n     * get the parameter weights\r\n     * @returns {object} lookup with parameter weights\r\n     */\r\n    getParams() {\r\n        let paramWeights: {[s: string]: number} = {};\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return paramWeights;\r\n    }\r\n\r\n    _addEventListeners() {\r\n        let ___this = this;\r\n\r\n\r\n        //change function\r\n        this.$container.find('input[type=\"range\"]').change(function () {\r\n                if (___this.resetting) {\r\n                    return;\r\n                }\r\n\r\n                let $this = $(this);\r\n                let domId = this['id'];\r\n                let sldr = ___this._sliderLookup[domId];\r\n\r\n                let newValue = parseFloat($this.val() as string);\r\n\r\n                let oldValue = sldr.weight;\r\n                let diff = newValue - oldValue;\r\n                diff = Number(diff.toFixed(1));\r\n\r\n                sldr.weight = Number(newValue.toFixed(1));\r\n\r\n                ___this._handleRemainder(diff, domId);\r\n\r\n                //cleanup, make sure the sum is still 100\r\n                let sum = Number(___this.getSum().toFixed(1));\r\n\r\n                if (sum > 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMin) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(-0.1);\r\n                                sum -= 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                } else if (sum < 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMax) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(0.1);\r\n                                sum += 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n\r\n                ___this._$presetSelector.val('0');\r\n                ___this._runChangedCallback();\r\n            }\r\n        );\r\n\r\n        //update the selected parameter when the selection is changed\r\n        $('.show-select').change(function () {\r\n            if (___this.resetting) {\r\n                return;\r\n            }\r\n            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();\r\n\r\n            ___this._$presetSelector.val('0');\r\n\r\n            ___this._runChangedCallback();\r\n\r\n        });\r\n\r\n        //lock the slider and update the reserved percent\r\n        this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n            let domEl = this;\r\n\r\n            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !(domEl as HTMLInputElement).checked;\r\n            ___this.reservedPercent = 0.0;\r\n            ___this.notLockedCount = 0;\r\n\r\n            let notLockedSliders = [];\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    ___this.reservedPercent += sld.weight;\r\n                    continue;\r\n                }\r\n                notLockedSliders.push(sld);\r\n                ___this.notLockedCount++;\r\n            }\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    continue;\r\n                }\r\n                sld.max = 100 - ___this.reservedPercent;\r\n            }\r\n\r\n            if (notLockedSliders.length == 1) {\r\n                notLockedSliders[0].min = notLockedSliders[0].weight;\r\n            } else {\r\n                for (let i = 0; i < notLockedSliders.length; i++) {\r\n                    notLockedSliders[i].min = 0;\r\n                }\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    get paramWeightsRegionVersion(): ChangeResponse{\r\n        return {paramWeights: this.getParams(),\r\n            region: this._$regionSelector.val() as string, mmVersion: this._$versionSelector.val() as string}\r\n    }\r\n}\r\n\r\nnm.Sliders = TipSliders;\r\nexport default TipSliders;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Sliders.js","sourceRoot":"","sources":["../../src/collections/Sliders.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections');\r\n\r\nexport interface TipSliderConfig {\r\n    label: string;\r\n    yearOptions: Array<{column: string, label: string}>\r\n}\r\n\r\nexport interface TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>\r\n}\r\n\r\nexport interface ChangeResponse{\r\n    paramWeights: Object;\r\n    region: string;\r\n    mmVersion: string;\r\n}\r\n\r\nexport interface ChangeCallback{\r\n    (chg: ChangeResponse): any\r\n}\r\n\r\n\r\nclass TipPresets implements TipPresetConfig {\r\n    label: string;\r\n    presets: Array<{column: string, value: number}>;\r\n    domId: string;\r\n\r\n    constructor(conf: TipPresetConfig) {\r\n        this.label = conf.label;\r\n        this.presets = conf.presets;\r\n        this.domId = this.label.replace(/ /g, '').toLowerCase();\r\n\r\n        let theSum = 0;\r\n\r\n        for (let pr of this.presets){\r\n            theSum += pr.value;\r\n        }\r\n\r\n        if (theSum != 100){\r\n            throw 'preset sum does note equal 100';\r\n        }\r\n    }\r\n}\r\n\r\n\r\nclass _Slider {\r\n    _min: number;\r\n    _max: number;\r\n    _locked: boolean;\r\n    atMin: boolean;\r\n    atMax: boolean;\r\n    _weightDefault: number;\r\n    _weight: number;\r\n    html: string;\r\n    domId: string;\r\n    name: string;\r\n\r\n    labelLow: JQuery;\r\n    labelHigh: JQuery;\r\n    labelVal: JQuery;\r\n    slider: JQuery;\r\n    selectionBox: JQuery;\r\n    chk: JQuery;\r\n\r\n    selectedParam: any;\r\n    selectedParamDefault: any;\r\n    _dropdownSelection: string;\r\n\r\n    /**\r\n     * Slider constructor\r\n     * @param sliderConfig - the configuration\r\n\r\n     */\r\n    constructor(sliderConfig: TipSliderConfig) {\r\n        this._dropdownSelection = null;\r\n        this._weight = null;\r\n        this.name = sliderConfig.label;\r\n        this.domId = this.name.toLowerCase().replace(/ /g, '-');\r\n\r\n        this._locked = false;\r\n\r\n        this._min = 0.0;\r\n        this._max = 100;\r\n\r\n        this.labelLow = null;\r\n        this.labelHigh = null;\r\n        this.labelVal = null;\r\n        this.slider = null;\r\n        this.chk = null;\r\n\r\n        this.atMin = false;\r\n        this.atMax = false;\r\n\r\n\r\n        let sel = `<select class=\"${sliderConfig.yearOptions.length == 1 ? 'hidden-select' : 'show-select'}\" id=\"${this.domId}_chg\">`;\r\n\r\n        for (let i = 0; i < sliderConfig.yearOptions.length; i++) {\r\n            let itm = sliderConfig.yearOptions[i];\r\n            sel += `<option value=\"${itm.column}\">${itm.label}</option>`;\r\n        }\r\n        sel += '</select>';\r\n\r\n        this.selectedParamDefault = this.selectedParam;\r\n\r\n        this.html = '<div class=\"slider-div\">' +\r\n            `<label for=\"${this.domId}_chk\" class=\"slider-label\">${this.name}</label>` +\r\n            sel + `<br>` +\r\n            `<input id=\"${this.domId}_chk\" type=\"checkbox\" title=\"Lock/Unlock Slider\">` +\r\n            `<label id=\"${this.domId}_low\" class=\"low-high\"></label>` +\r\n            `<input id=\"${this.domId}\" type=\"range\" value=\"50\" min=\"0\" max=\"100\" step=\"0.1\">` +\r\n            `<label id=\"${this.domId}_high\" class=\"low-high\"></label>` +\r\n            `<label id=\"${this.domId}_lbl\" for=\"${this.domId}\" class=\"percent-label\"></label></div>`;\r\n    }\r\n\r\n    /**\r\n     * add html to dom\r\n     * @param {jQuery} $container - container element\r\n     */\r\n    addToDom($container: JQuery) {\r\n        $container.append(this.html);\r\n        this.labelLow = $(`#${this.domId}_low`);\r\n        this.labelHigh = $(`#${this.domId}_high`);\r\n        this.labelVal = $(`#${this.domId}_lbl`);\r\n        this.slider = $(`#${this.domId}`);\r\n        this.selectionBox = $(`#${this.domId}_chg`);\r\n        this.chk = $(`#${this.domId}_chk`);\r\n    }\r\n\r\n    /**\r\n     * increment the slider\r\n     * @param {number} delta change delta\r\n     * @returns {number} the remainder not able to be allocated to this slider\r\n     */\r\n    increment(delta: number): number {\r\n        let remainder = 0;\r\n        delta = Number(delta.toFixed(1));\r\n\r\n        this._weight += delta;\r\n        if (this._weight < this._min) {\r\n            remainder = this._min - this._weight;\r\n            this._weight = this._min;\r\n            this.atMin = true;\r\n        } else if (this._weight > this._max) {\r\n            remainder = this._max - this._weight;\r\n            this._weight = this._max;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n\r\n        this.slider.val(this._weight.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n\r\n        return remainder;\r\n    }\r\n\r\n    /**\r\n     * set the value and drop down\r\n     * @param {number} newVal the new value\r\n     * @param {string} selectedParam the selected parameter\r\n     */\r\n    setValAndDropDown(newVal: number, selectedParam: string) {\r\n        this.min = 0;\r\n        this.max = 100;\r\n        this.weight = newVal;\r\n        this.slider.val(newVal.toFixed(1));\r\n        this.selectionBox.val(selectedParam);\r\n        this.selectedParam = selectedParam;\r\n        this.locked = true;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {boolean} if locked\r\n     */\r\n    get locked() {\r\n        return this._locked;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {boolean} val if locked\r\n     */\r\n    set locked(val) {\r\n        this._locked = val;\r\n        this.slider.prop('disabled', this._locked);\r\n        this.selectionBox.prop('disabled', this._locked);\r\n        this.chk.prop('checked', !this._locked);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the minimum\r\n     */\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal new minimum\r\n     */\r\n    set min(newVal) {\r\n        this._min = Number(newVal.toFixed(1));\r\n        if (this._min < 0) {\r\n            this._min = 0;\r\n        }\r\n        this.labelLow.html(this._min.toFixed(1));\r\n        this.slider.attr('min', this._min.toFixed(1));\r\n        this.atMin = this._weight == this._min;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the maximum\r\n     */\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the maximum\r\n     */\r\n    set max(newVal) {\r\n        this._max = Number(newVal.toFixed(1));\r\n        if (this._max > 100) {\r\n            this._max = 100.0;\r\n        }\r\n        this.labelHigh.html(this._max.toFixed(1));\r\n        this.slider.attr('max', this._max.toFixed(1));\r\n        this.atMax = this._weight == this._max;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number} the weight\r\n     */\r\n    get weight() {\r\n        return this._weight;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} newVal the weight\r\n     */\r\n    set weight(newVal) {\r\n        this._weight = Number(newVal.toFixed(1));\r\n        this.labelVal.html(this._weight.toFixed(1) + '%');\r\n        if (this._weight <= this._min) {\r\n            this.atMin = true;\r\n            this.atMax = false;\r\n        } else if (this._weight >= this._max) {\r\n            this.atMin = false;\r\n            this.atMax = true;\r\n        } else {\r\n            this.atMin = false;\r\n            this.atMax = false;\r\n        }\r\n    }\r\n}\r\n\r\nnm._Slider = _Slider;\r\n\r\n\r\n/**\r\n * class to keep track of the sliders\r\n */\r\nexport class TipSliders {\r\n    $container: JQuery;\r\n    reservedPercent: number;\r\n    lockedCount: number;\r\n    notLockedCount: number;\r\n    private _sliderList: Array<_Slider>;\r\n    private _sliderLookup: {[s: string]: _Slider};\r\n    private resetting: boolean;\r\n    private _changedCallback: ChangeCallback;\r\n\r\n    private _lockedList: Array<_Slider>;\r\n    private _inRangeList: Array<_Slider>;\r\n    private _atMinList: Array<_Slider>;\r\n    private _atMaxList: Array<_Slider>;\r\n\r\n    private _presetArray: Array<TipPresets>;\r\n    private _presetLookup: {[s: string]: TipPresets};\r\n\r\n    private _$presetSelector: JQuery;\r\n    private _$regionSelector: JQuery;\r\n    private _$versionSelector: JQuery;\r\n\r\n    /**\r\n     *\r\n     * @param sliderConfigs\r\n     * @param presetConfig\r\n     * @param divId\r\n     * @param presetSelector\r\n     * @param regionSelector\r\n     * @param versionSelector\r\n     * @param chgCallback\r\n     */\r\n    constructor(sliderConfigs: Array<TipSliderConfig>, presetConfig: Array<TipPresetConfig>,\r\n                divId: string, presetSelector: JQuery, regionSelector: JQuery, versionSelector: JQuery,\r\n                chgCallback?: ChangeCallback) {\r\n\r\n        this.resetting = false;\r\n        this.reservedPercent = 0.0;\r\n        this.$container = $('#' + divId);\r\n        this.$container.addClass('slider-container');\r\n\r\n        this._changedCallback = typeof chgCallback == 'function' ? chgCallback : () => {};\r\n\r\n        this._$presetSelector = presetSelector;\r\n        this._$regionSelector = regionSelector;\r\n        this._$versionSelector = versionSelector;\r\n\r\n        this._sliderList = [];\r\n        this._sliderLookup = {};\r\n\r\n        for (let i = 0; i < sliderConfigs.length; i++) {\r\n            let sld = new _Slider(sliderConfigs[i]);\r\n            this._sliderList.push(sld);\r\n            this._sliderLookup[sld.domId] = sld;\r\n            sld.addToDom(this.$container);\r\n        }\r\n\r\n        this._presetArray = [];\r\n        this._presetLookup = {};\r\n\r\n        for (let i = 0; i < presetConfig.length; i++) {\r\n            let preset = new TipPresets(presetConfig[i]);\r\n\r\n            let idx = (i + 1).toFixed();\r\n\r\n            this._presetLookup[idx] = preset;\r\n            this._presetArray.push(preset);\r\n            this._$presetSelector.append(`<option value=\"${idx}\">${preset.label}</option>`);\r\n        }\r\n\r\n\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        this.lockedCount = 10;\r\n        this.notLockedCount = 0;\r\n\r\n        this._splitSliderArray();\r\n\r\n\r\n        this._$presetSelector.change(() => {\r\n            this.setPresetValues();\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$regionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$versionSelector.change(() => {\r\n            this._runChangedCallback();\r\n        });\r\n\r\n        this._$presetSelector.trigger('change');\r\n\r\n        this._addEventListeners();\r\n    }\r\n\r\n    _runChangedCallback(){\r\n        this._changedCallback(this.paramWeightsRegionVersion);\r\n    }\r\n\r\n    get changedCallback(): ChangeCallback{\r\n        return this._changedCallback\r\n    }\r\n\r\n    set changedCallback(chg: ChangeCallback){\r\n        this._changedCallback = chg;\r\n        this._runChangedCallback();\r\n    }\r\n\r\n    setPresetValues() {\r\n        let idx = this._$presetSelector.val() || '1';\r\n\r\n        let thePreset = this._presetLookup[idx as string];\r\n\r\n        for (let i = 0; i < thePreset.presets.length; i++) {\r\n            let presetValues = thePreset.presets[i];\r\n            let theSlider = this._sliderList[i];\r\n\r\n            theSlider.locked = true;\r\n            theSlider.setValAndDropDown(presetValues.value, presetValues.column);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * split array into subarrays holding the sliders\r\n     * @private\r\n     */\r\n    _splitSliderArray() {\r\n        this._lockedList = [];\r\n        this._inRangeList = [];\r\n        this._atMinList = [];\r\n        this._atMaxList = [];\r\n\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n\r\n            if (sld.locked) {\r\n                this._lockedList.push(sld);\r\n            } else if (sld.atMin) {\r\n                this._atMinList.push(sld);\r\n            } else if (sld.atMax) {\r\n                this._atMaxList.push(sld);\r\n            } else {\r\n                this._inRangeList.push(sld);\r\n            }\r\n        }\r\n        this.lockedCount = this._lockedList.length;\r\n        this.notLockedCount = this._sliderList.length - this.lockedCount;\r\n    }\r\n\r\n    /**\r\n     * handle remainder, recursive to take care of min max overshoots\r\n     * @param {number} remain the remainder\r\n     * @param {string} skipDomId - this dom id\r\n     * @private\r\n     */\r\n    _handleRemainder(remain: number, skipDomId: string) {\r\n\r\n        remain = Number(remain.toFixed(1));\r\n        if (remain == 0) {\r\n            return;\r\n        }\r\n\r\n        this._splitSliderArray();\r\n\r\n        let canChangeArray = [];\r\n        for (let i = 0; i < this._inRangeList.length; i++) {\r\n            let sld = this._inRangeList[i];\r\n            if (sld.domId == skipDomId) {\r\n                continue;\r\n            }\r\n            canChangeArray.push(sld);\r\n        }\r\n\r\n        if (remain > 0) {\r\n            for (let i = 0; i < this._atMaxList.length; i++) {\r\n                let sld = this._atMaxList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < this._atMinList.length; i++) {\r\n                let sld = this._atMinList[i];\r\n                if (sld.domId == skipDomId) {\r\n                    continue;\r\n                }\r\n                canChangeArray.push(sld);\r\n            }\r\n        }\r\n\r\n        if (canChangeArray.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));\r\n\r\n        let newRemainder = 0;\r\n        for (let i = 0; i < canChangeArray.length; i++) {\r\n            newRemainder += canChangeArray[i].increment(inc);\r\n        }\r\n\r\n        this._handleRemainder(newRemainder, skipDomId);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} keyValList key and value list\r\n     */\r\n    setValues(keyValList: {[s:string]: [number, string]}) {\r\n        this.resetting = true;\r\n        for (let k in keyValList) {\r\n            if (keyValList.hasOwnProperty(k)) {\r\n                this._sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);\r\n            }\r\n        }\r\n        this.resetting = false;\r\n    }\r\n\r\n    /**\r\n     * get the weight sum\r\n     * @returns {number} the weight sum\r\n     */\r\n    getSum() {\r\n        let total = 0;\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            total += Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return total;\r\n    }\r\n\r\n    /**\r\n     * get the parameter weights\r\n     * @returns {object} lookup with parameter weights\r\n     */\r\n    getParams() {\r\n        let paramWeights: {[s: string]: number} = {};\r\n        for (let i = 0; i < this._sliderList.length; i++) {\r\n            let sld = this._sliderList[i];\r\n            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));\r\n        }\r\n\r\n        return paramWeights;\r\n    }\r\n\r\n    _addEventListeners() {\r\n        let ___this = this;\r\n\r\n\r\n        //change function\r\n        this.$container.find('input[type=\"range\"]').change(function () {\r\n                if (___this.resetting) {\r\n                    return;\r\n                }\r\n\r\n                let $this = $(this);\r\n                let domId = this['id'];\r\n                let sldr = ___this._sliderLookup[domId];\r\n\r\n                let newValue = parseFloat($this.val() as string);\r\n\r\n                let oldValue = sldr.weight;\r\n                let diff = newValue - oldValue;\r\n                diff = Number(diff.toFixed(1));\r\n\r\n                sldr.weight = Number(newValue.toFixed(1));\r\n\r\n                ___this._handleRemainder(diff, domId);\r\n\r\n                //cleanup, make sure the sum is still 100\r\n                let sum = Number(___this.getSum().toFixed(1));\r\n\r\n                if (sum > 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMin) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(-0.1);\r\n                                sum -= 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                } else if (sum < 100) {\r\n                    loop1:\r\n                        while (true) {\r\n                            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                                let sld = ___this._sliderList[i];\r\n                                if (sld.domId == domId || sld.locked || sld.atMax) {\r\n                                    continue;\r\n                                }\r\n                                sld.increment(0.1);\r\n                                sum += 0.1;\r\n                                if (sum.toFixed(1) == '100.0') {\r\n                                    break loop1;\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n\r\n                ___this._$presetSelector.val('0');\r\n                ___this._runChangedCallback();\r\n            }\r\n        );\r\n\r\n        //update the selected parameter when the selection is changed\r\n        $('.show-select').change(function () {\r\n            if (___this.resetting) {\r\n                return;\r\n            }\r\n            ___this._sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();\r\n\r\n            ___this._$presetSelector.val('0');\r\n\r\n            ___this._runChangedCallback();\r\n\r\n        });\r\n\r\n        //lock the slider and update the reserved percent\r\n        this.$container.find('input[type=\"checkbox\"]').change(function () {\r\n            let domEl = this;\r\n\r\n            ___this._sliderLookup[domEl.id.replace('_chk', '')].locked = !(domEl as HTMLInputElement).checked;\r\n            ___this.reservedPercent = 0.0;\r\n            ___this.notLockedCount = 0;\r\n\r\n            let notLockedSliders = [];\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    ___this.reservedPercent += sld.weight;\r\n                    continue;\r\n                }\r\n                notLockedSliders.push(sld);\r\n                ___this.notLockedCount++;\r\n            }\r\n\r\n            for (let i = 0; i < ___this._sliderList.length; i++) {\r\n                let sld = ___this._sliderList[i];\r\n                if (sld.locked) {\r\n                    continue;\r\n                }\r\n                sld.max = 100 - ___this.reservedPercent;\r\n            }\r\n\r\n            if (notLockedSliders.length == 1) {\r\n                notLockedSliders[0].min = notLockedSliders[0].weight;\r\n            } else {\r\n                for (let i = 0; i < notLockedSliders.length; i++) {\r\n                    notLockedSliders[i].min = 0;\r\n                }\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    get paramWeightsRegionVersion(): ChangeResponse{\r\n        return {paramWeights: this.getParams(),\r\n            region: this._$regionSelector.val() as string, mmVersion: this._$versionSelector.val() as string}\r\n    }\r\n}\r\n\r\nnm.Sliders = TipSliders;\r\nexport default TipSliders;\r\n"]}
\ No newline at end of file
diff --git a/dist/domUtil/SelectBoxBase.js b/dist/domUtil/SelectBoxBase.js
index ba13baa..2fac8c9 100644
--- a/dist/domUtil/SelectBoxBase.js
+++ b/dist/domUtil/SelectBoxBase.js
@@ -3,27 +3,26 @@
  * Created by gavorhes on 5/13/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var makeGuid_1 = require("../util/makeGuid");
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('domUtil');
-var SelectBoxBase = /** @class */ (function () {
+const makeGuid_1 = require("../util/makeGuid");
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('domUtil');
+class SelectBoxBase {
     /**
      *
      * @param {jQuery} parent - parent container
      * @param {string} labelContent
      * @param {contentGenerator} [contentGen=undefined]
      */
-    function SelectBoxBase(parent, labelContent, contentGen) {
-        var _this = this;
-        var guidTop = makeGuid_1.default();
-        var guid = makeGuid_1.default();
-        var htmlString = "<div id=\"" + guidTop + "\">";
-        htmlString += "<label for=\"" + guid + "\">" + labelContent + "</label>";
+    constructor(parent, labelContent, contentGen) {
+        let guidTop = makeGuid_1.default();
+        let guid = makeGuid_1.default();
+        let htmlString = `<div id="${guidTop}">`;
+        htmlString += `<label for="${guid}">${labelContent}</label>`;
         if (contentGen) {
             htmlString += contentGen(guid);
         }
         else {
-            htmlString += "<select id=\"" + guid + "\"></select>";
+            htmlString += `<select id="${guid}"></select>`;
         }
         htmlString += '</div>';
         parent.append(htmlString);
@@ -35,83 +34,65 @@ var SelectBoxBase = /** @class */ (function () {
          * @private
          */
         this._changeListeners = [];
-        this._box = parent.find("#" + guid);
+        this._box = parent.find(`#${guid}`);
         if (!this._box) {
             throw 'the select box was not found';
         }
-        this._box.change(function () {
-            _this.changed();
+        this._box.change(() => {
+            this.changed();
         });
     }
-    Object.defineProperty(SelectBoxBase.prototype, "box", {
-        /**
-         *
-         * @returns {jQuery}
-         */
-        get: function () {
-            return this._box;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    SelectBoxBase.prototype.changed = function () {
-        var v = this._box.val();
-        for (var _i = 0, _a = this._changeListeners; _i < _a.length; _i++) {
-            var f = _a[_i];
+    /**
+     *
+     * @returns {jQuery}
+     */
+    get box() {
+        return this._box;
+    }
+    changed() {
+        let v = this._box.val();
+        for (let f of this._changeListeners) {
             f(v);
         }
-    };
+    }
     /**
      *
      * @param {selectChangeCallback} func
      */
-    SelectBoxBase.prototype.addChangeListener = function (func) {
+    addChangeListener(func) {
         this._changeListeners.push(func);
-    };
-    Object.defineProperty(SelectBoxBase.prototype, "selectedValue", {
-        get: function () {
-            var theVal = this.box.val();
-            if (theVal == null || typeof theVal == 'undefined') {
-                return null;
-            }
-            else if (isNaN(theVal)) {
-                return theVal;
+    }
+    get selectedValue() {
+        let theVal = this.box.val();
+        if (theVal == null || typeof theVal == 'undefined') {
+            return null;
+        }
+        else if (isNaN(theVal)) {
+            return theVal;
+        }
+        else {
+            if (theVal.indexOf('.') > -1) {
+                return parseFloat(theVal);
             }
             else {
-                if (theVal.indexOf('.') > -1) {
-                    return parseFloat(theVal);
-                }
-                else {
-                    return parseInt(theVal);
-                }
+                return parseInt(theVal);
             }
-        },
-        /**
-         *
-         * @param {string|number} v
-         */
-        set: function (v) {
-            this.box.val(v);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(SelectBoxBase.prototype, "selectedIndex", {
-        get: function () {
-            return this._box[0].selectedIndex;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(SelectBoxBase.prototype, "selectedText", {
-        get: function () {
-            return this.box.find('option:selected').text();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return SelectBoxBase;
-}());
+        }
+    }
+    get selectedIndex() {
+        return this._box[0].selectedIndex;
+    }
+    /**
+     *
+     * @param {string|number} v
+     */
+    set selectedValue(v) {
+        this.box.val(v);
+    }
+    get selectedText() {
+        return this.box.find('option:selected').text();
+    }
+}
 exports.SelectBoxBase = SelectBoxBase;
 nm.SelectBoxBase = SelectBoxBase;
 exports.default = SelectBoxBase;
diff --git a/dist/domUtil/SelectBoxBase.js.map b/dist/domUtil/SelectBoxBase.js.map
index a34ef5e..9cc7f72 100644
--- a/dist/domUtil/SelectBoxBase.js.map
+++ b/dist/domUtil/SelectBoxBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"SelectBoxBase.js","sourceRoot":"","sources":["../../src/domUtil/SelectBoxBase.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 5/13/2016.\r\n */\r\n\r\nimport makeGuid from '../util/makeGuid';\r\nimport provide from '../util/provide';\r\nconst nm = provide('domUtil');\r\n\r\nexport interface selectChangeCallback{\r\n    /**\r\n     *\r\n     * @param theValue the current select value of the select box\r\n     */\r\n    (theValue: string) : void\r\n}\r\n\r\n/**\r\n * must return in the contents <select id=\"${guid}\"></select> among other things\r\n */\r\nexport interface contentGenerator{\r\n    /**\r\n     * @param aGuid\r\n     */\r\n    (aGuid: string): string\r\n}\r\n\r\n\r\nexport class SelectBoxBase{\r\n    _$container: JQuery;\r\n    $label: JQuery;\r\n    _box: JQuery;\r\n    _changeListeners: Array<selectChangeCallback>;\r\n    /**\r\n     *\r\n     * @param {jQuery} parent - parent container\r\n     * @param {string} labelContent\r\n     * @param {contentGenerator} [contentGen=undefined]\r\n     */\r\n    constructor(parent: JQuery, labelContent: string, contentGen?: contentGenerator){\r\n        let guidTop = makeGuid();\r\n        let guid = makeGuid();\r\n\r\n        let htmlString = `<div id=\"${guidTop}\">`;\r\n        htmlString += `<label for=\"${guid}\">${labelContent}</label>`;\r\n\r\n        if (contentGen){\r\n            htmlString += contentGen(guid);\r\n        } else {\r\n            htmlString += `<select id=\"${guid}\"></select>`;\r\n        }\r\n        htmlString += '</div>';\r\n\r\n        parent.append(htmlString);\r\n\r\n        this._$container = parent.find('#' + guidTop);\r\n\r\n        this.$label = this._$container.find('label');\r\n\r\n        /**\r\n         *\r\n         * @type {Array<selectChangeCallback>}\r\n         * @private\r\n         */\r\n        this._changeListeners = [];\r\n\r\n        this._box = parent.find(`#${guid}`);\r\n        \r\n        if (!this._box){\r\n            throw 'the select box was not found';\r\n        }\r\n\r\n        this._box.change(() => {\r\n            this.changed();\r\n        })\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @returns {jQuery}\r\n     */\r\n    get box(){\r\n        return this._box;\r\n    }\r\n\r\n    changed(){\r\n        let v = this._box.val();\r\n        \r\n        for (let f of this._changeListeners){\r\n            f(v as string);\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {selectChangeCallback} func\r\n     */\r\n    addChangeListener(func: selectChangeCallback){\r\n        this._changeListeners.push(func);\r\n    }\r\n\r\n\r\n    get selectedValue(): string|number{\r\n        let theVal = this.box.val();\r\n\r\n        if (theVal == null || typeof theVal == 'undefined'){\r\n            return null;\r\n        } else if (isNaN(theVal as number)){\r\n            return theVal as number;\r\n        } else {\r\n            if ((theVal as string).indexOf('.') > -1){\r\n                return parseFloat(theVal as string)\r\n            } else {\r\n                return parseInt(theVal as string);\r\n            }\r\n        }\r\n    }\r\n\r\n    get selectedIndex(): number {\r\n        return (this._box[0] as HTMLSelectElement).selectedIndex;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|number} v\r\n     */\r\n    set selectedValue(v: string|number){\r\n        this.box.val(v);\r\n    }\r\n    \r\n    get selectedText(){\r\n        return this.box.find('option:selected').text();\r\n    }\r\n\r\n}\r\n\r\nnm.SelectBoxBase = SelectBoxBase;\r\n\r\nexport default SelectBoxBase;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"SelectBoxBase.js","sourceRoot":"","sources":["../../src/domUtil/SelectBoxBase.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 5/13/2016.\r\n */\r\n\r\nimport makeGuid from '../util/makeGuid';\r\nimport provide from '../util/provide';\r\nconst nm = provide('domUtil');\r\n\r\nexport interface selectChangeCallback{\r\n    /**\r\n     *\r\n     * @param theValue the current select value of the select box\r\n     */\r\n    (theValue: string) : void\r\n}\r\n\r\n/**\r\n * must return in the contents <select id=\"${guid}\"></select> among other things\r\n */\r\nexport interface contentGenerator{\r\n    /**\r\n     * @param aGuid\r\n     */\r\n    (aGuid: string): string\r\n}\r\n\r\n\r\nexport class SelectBoxBase{\r\n    _$container: JQuery;\r\n    $label: JQuery;\r\n    _box: JQuery;\r\n    _changeListeners: Array<selectChangeCallback>;\r\n    /**\r\n     *\r\n     * @param {jQuery} parent - parent container\r\n     * @param {string} labelContent\r\n     * @param {contentGenerator} [contentGen=undefined]\r\n     */\r\n    constructor(parent: JQuery, labelContent: string, contentGen?: contentGenerator){\r\n        let guidTop = makeGuid();\r\n        let guid = makeGuid();\r\n\r\n        let htmlString = `<div id=\"${guidTop}\">`;\r\n        htmlString += `<label for=\"${guid}\">${labelContent}</label>`;\r\n\r\n        if (contentGen){\r\n            htmlString += contentGen(guid);\r\n        } else {\r\n            htmlString += `<select id=\"${guid}\"></select>`;\r\n        }\r\n        htmlString += '</div>';\r\n\r\n        parent.append(htmlString);\r\n\r\n        this._$container = parent.find('#' + guidTop);\r\n\r\n        this.$label = this._$container.find('label');\r\n\r\n        /**\r\n         *\r\n         * @type {Array<selectChangeCallback>}\r\n         * @private\r\n         */\r\n        this._changeListeners = [];\r\n\r\n        this._box = parent.find(`#${guid}`);\r\n        \r\n        if (!this._box){\r\n            throw 'the select box was not found';\r\n        }\r\n\r\n        this._box.change(() => {\r\n            this.changed();\r\n        })\r\n    }\r\n\r\n    /**\r\n     * \r\n     * @returns {jQuery}\r\n     */\r\n    get box(){\r\n        return this._box;\r\n    }\r\n\r\n    changed(){\r\n        let v = this._box.val();\r\n        \r\n        for (let f of this._changeListeners){\r\n            f(v as string);\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {selectChangeCallback} func\r\n     */\r\n    addChangeListener(func: selectChangeCallback){\r\n        this._changeListeners.push(func);\r\n    }\r\n\r\n\r\n    get selectedValue(): string|number{\r\n        let theVal = this.box.val();\r\n\r\n        if (theVal == null || typeof theVal == 'undefined'){\r\n            return null;\r\n        } else if (isNaN(theVal as number)){\r\n            return theVal as number;\r\n        } else {\r\n            if ((theVal as string).indexOf('.') > -1){\r\n                return parseFloat(theVal as string)\r\n            } else {\r\n                return parseInt(theVal as string);\r\n            }\r\n        }\r\n    }\r\n\r\n    get selectedIndex(): number {\r\n        return (this._box[0] as HTMLSelectElement).selectedIndex;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|number} v\r\n     */\r\n    set selectedValue(v: string|number){\r\n        this.box.val(v);\r\n    }\r\n    \r\n    get selectedText(){\r\n        return this.box.find('option:selected').text();\r\n    }\r\n\r\n}\r\n\r\nnm.SelectBoxBase = SelectBoxBase;\r\n\r\nexport default SelectBoxBase;\r\n"]}
\ No newline at end of file
diff --git a/dist/domUtil/day-range.js b/dist/domUtil/day-range.js
index 31ace48..281bb2f 100644
--- a/dist/domUtil/day-range.js
+++ b/dist/domUtil/day-range.js
@@ -1,18 +1,18 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
 require("jquery-ui");
-var nm = provide_1.default('domUtil');
-var DayRange = /** @class */ (function () {
+let nm = provide_1.default('domUtil');
+class DayRange {
     /**
      * constructor for the date range
      * @param {number} dayRange number of days
      * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
      */
-    function DayRange(jQueryRef, dayRange) {
+    constructor(jQueryRef, dayRange) {
         this._workingDayRange = dayRange - 1;
-        var pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
+        let pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
             '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
             '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' +
             '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
@@ -23,13 +23,13 @@ var DayRange = /** @class */ (function () {
         this._$endDate.datepicker();
         this._startDate = null;
         this._endDate = null;
-        var dte1 = new Date();
+        let dte1 = new Date();
         dte1.setHours(0, 0, 0, 0);
-        var dte2 = new Date(dte1.getTime());
+        let dte2 = new Date(dte1.getTime());
         dte2.setDate(dte2.getDate() + dayRange);
         dte2.setHours(23, 59, 59, 0);
         this._maxDateRange = dte2.getTime() - dte1.getTime();
-        var _this = this;
+        let _this = this;
         //add event listeners
         this._$startDate.change(function () {
             _this.startDate = new Date(this.value);
@@ -40,54 +40,45 @@ var DayRange = /** @class */ (function () {
         // initialize
         this.endDate = new Date();
     }
-    Object.defineProperty(DayRange.prototype, "startDate", {
-        get: function () {
-            return this._startDate;
-        },
-        /**
-         *
-         * @param val
-         */
-        set: function (val) {
-            if (typeof val == 'string') {
-                val = new Date(val);
-            }
-            this._startDate = val;
-            this._startDate.setHours(0, 0, 0, 0);
-            this._$startDate.val(this._startDate.toLocaleDateString());
-            if (this.endDate == null ||
-                this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||
-                this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._startDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
-                this.endDate = new Date(tmpDate.getTime());
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(DayRange.prototype, "endDate", {
-        get: function () {
-            return this._endDate;
-        },
-        set: function (val) {
-            if (typeof val == 'string') {
-                val = new Date(val);
-            }
-            this._endDate = val;
-            this._endDate.setHours(23, 59, 59, 0);
-            this._$endDate.val(this._endDate.toLocaleDateString());
-            if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._endDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
-                this.startDate = new Date(tmpDate.getTime());
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return DayRange;
-}());
+    get startDate() {
+        return this._startDate;
+    }
+    /**
+     *
+     * @param val
+     */
+    set startDate(val) {
+        if (typeof val == 'string') {
+            val = new Date(val);
+        }
+        this._startDate = val;
+        this._startDate.setHours(0, 0, 0, 0);
+        this._$startDate.val(this._startDate.toLocaleDateString());
+        if (this.endDate == null ||
+            this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||
+            this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+            let tmpDate = new Date(this._startDate.getTime());
+            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
+            this.endDate = new Date(tmpDate.getTime());
+        }
+    }
+    get endDate() {
+        return this._endDate;
+    }
+    set endDate(val) {
+        if (typeof val == 'string') {
+            val = new Date(val);
+        }
+        this._endDate = val;
+        this._endDate.setHours(23, 59, 59, 0);
+        this._$endDate.val(this._endDate.toLocaleDateString());
+        if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
+            let tmpDate = new Date(this._endDate.getTime());
+            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
+            this.startDate = new Date(tmpDate.getTime());
+        }
+    }
+}
 exports.DayRange = DayRange;
 nm.DayRange = DayRange;
 exports.default = DayRange;
diff --git a/dist/domUtil/day-range.js.map b/dist/domUtil/day-range.js.map
index e474f0b..060d3fe 100644
--- a/dist/domUtil/day-range.js.map
+++ b/dist/domUtil/day-range.js.map
@@ -1 +1 @@
-{"version":3,"file":"day-range.js","sourceRoot":"","sources":["../../src/domUtil/day-range.ts"],"names":[],"mappings":"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","sourcesContent":["import provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\n\r\nlet nm = provide('domUtil');\r\n\r\nexport class DayRange {\r\n    _workingDayRange: number;\r\n    _$startDate: JQuery;\r\n    _$endDate: JQuery;\r\n    _maxDateRange: number;\r\n    _startDate: Date;\r\n    _endDate: Date;\r\n\r\n    /**\r\n     * constructor for the date range\r\n     * @param {number} dayRange number of days\r\n     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element\r\n     */\r\n    constructor(jQueryRef: JQuery, dayRange: number) {\r\n        this._workingDayRange = dayRange - 1;\r\n\r\n        let pickerHtml = '<label for=\"start-date\" style=\"width: 78px; display: inline-block; margin:5px;\">Start Date</label>' +\r\n            '<input type=\"text\" readonly id=\"start-date\" class=\"date-pick\"  style=\"width: 90px;\">' +\r\n            '<br><label for=\"end-date\" style=\"width: 78px; display: inline-block;  margin:5px;\">End Date</label>' +\r\n            '<input type=\"text\" readonly id=\"end-date\" class=\"date-pick\" style=\"width: 90px;\">';\r\n\r\n        jQueryRef.append(pickerHtml);\r\n\r\n        this._$startDate = $('#start-date');\r\n        this._$endDate = $('#end-date');\r\n\r\n        this._$startDate.datepicker();\r\n        this._$endDate.datepicker();\r\n\r\n        this._startDate = null;\r\n        this._endDate = null;\r\n\r\n        let dte1 = new Date();\r\n        dte1.setHours(0, 0, 0, 0);\r\n        let dte2 = new Date(dte1.getTime());\r\n        dte2.setDate(dte2.getDate() + dayRange);\r\n        dte2.setHours(23, 59, 59, 0);\r\n        this._maxDateRange = dte2.getTime() - dte1.getTime();\r\n\r\n        let _this = this;\r\n\r\n        //add event listeners\r\n        this._$startDate.change(function () {\r\n            _this.startDate = new Date((this as HTMLInputElement).value);\r\n        });\r\n\r\n        this._$endDate.change(function () {\r\n            _this.endDate = new Date((this as HTMLInputElement).value);\r\n        });\r\n\r\n        // initialize\r\n        this.endDate = new Date();\r\n    }\r\n\r\n    get startDate(): Date {\r\n        return this._startDate;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param val\r\n     */\r\n    set startDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._startDate = val;\r\n        this._startDate.setHours(0, 0, 0, 0);\r\n        this._$startDate.val(this._startDate.toLocaleDateString());\r\n\r\n        if (\r\n            this.endDate == null ||\r\n            this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||\r\n            this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._startDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);\r\n            this.endDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n\r\n    get endDate(): Date {\r\n        return this._endDate;\r\n    }\r\n\r\n\r\n    set endDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._endDate = val;\r\n        this._endDate.setHours(23, 59, 59, 0);\r\n        this._$endDate.val(this._endDate.toLocaleDateString());\r\n        if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._endDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);\r\n            this.startDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n}\r\n\r\nnm.DayRange = DayRange;\r\n\r\nexport default DayRange;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"day-range.js","sourceRoot":"","sources":["../../src/domUtil/day-range.ts"],"names":[],"mappings":"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","sourcesContent":["import provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\n\r\nlet nm = provide('domUtil');\r\n\r\nexport class DayRange {\r\n    _workingDayRange: number;\r\n    _$startDate: JQuery;\r\n    _$endDate: JQuery;\r\n    _maxDateRange: number;\r\n    _startDate: Date;\r\n    _endDate: Date;\r\n\r\n    /**\r\n     * constructor for the date range\r\n     * @param {number} dayRange number of days\r\n     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element\r\n     */\r\n    constructor(jQueryRef: JQuery, dayRange: number) {\r\n        this._workingDayRange = dayRange - 1;\r\n\r\n        let pickerHtml = '<label for=\"start-date\" style=\"width: 78px; display: inline-block; margin:5px;\">Start Date</label>' +\r\n            '<input type=\"text\" readonly id=\"start-date\" class=\"date-pick\"  style=\"width: 90px;\">' +\r\n            '<br><label for=\"end-date\" style=\"width: 78px; display: inline-block;  margin:5px;\">End Date</label>' +\r\n            '<input type=\"text\" readonly id=\"end-date\" class=\"date-pick\" style=\"width: 90px;\">';\r\n\r\n        jQueryRef.append(pickerHtml);\r\n\r\n        this._$startDate = $('#start-date');\r\n        this._$endDate = $('#end-date');\r\n\r\n        this._$startDate.datepicker();\r\n        this._$endDate.datepicker();\r\n\r\n        this._startDate = null;\r\n        this._endDate = null;\r\n\r\n        let dte1 = new Date();\r\n        dte1.setHours(0, 0, 0, 0);\r\n        let dte2 = new Date(dte1.getTime());\r\n        dte2.setDate(dte2.getDate() + dayRange);\r\n        dte2.setHours(23, 59, 59, 0);\r\n        this._maxDateRange = dte2.getTime() - dte1.getTime();\r\n\r\n        let _this = this;\r\n\r\n        //add event listeners\r\n        this._$startDate.change(function () {\r\n            _this.startDate = new Date((this as HTMLInputElement).value);\r\n        });\r\n\r\n        this._$endDate.change(function () {\r\n            _this.endDate = new Date((this as HTMLInputElement).value);\r\n        });\r\n\r\n        // initialize\r\n        this.endDate = new Date();\r\n    }\r\n\r\n    get startDate(): Date {\r\n        return this._startDate;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param val\r\n     */\r\n    set startDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._startDate = val;\r\n        this._startDate.setHours(0, 0, 0, 0);\r\n        this._$startDate.val(this._startDate.toLocaleDateString());\r\n\r\n        if (\r\n            this.endDate == null ||\r\n            this._endDate.getTime() - this._startDate.getTime() > this._maxDateRange ||\r\n            this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._startDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);\r\n            this.endDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n\r\n    get endDate(): Date {\r\n        return this._endDate;\r\n    }\r\n\r\n\r\n    set endDate(val: Date) {\r\n        if (typeof val == 'string') {\r\n            val = new Date(val as string);\r\n        }\r\n\r\n        this._endDate = val;\r\n        this._endDate.setHours(23, 59, 59, 0);\r\n        this._$endDate.val(this._endDate.toLocaleDateString());\r\n        if (this._startDate == null || this._endDate.getTime() - this.startDate.getTime() > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {\r\n            let tmpDate = new Date(this._endDate.getTime());\r\n            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);\r\n            this.startDate = new Date(tmpDate.getTime());\r\n        }\r\n    }\r\n}\r\n\r\nnm.DayRange = DayRange;\r\n\r\nexport default DayRange;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/domUtil/media-control.js b/dist/domUtil/media-control.js
index e50940d..16299d6 100644
--- a/dist/domUtil/media-control.js
+++ b/dist/domUtil/media-control.js
@@ -3,35 +3,32 @@
  * Created by gavorhes on 11/2/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var range_change_1 = require("./range-change");
-var $ = require("jquery");
-var nm = provide_1.default('domUtil');
+const provide_1 = require("../util/provide");
+const range_change_1 = require("./range-change");
+const $ = require("jquery");
+let nm = provide_1.default('domUtil');
 /**
  * @callback mediaCallback
  * @param {number} tm
  */
 function timeToLocalDateString(tm) {
     "use strict";
-    var d = new Date(tm);
-    var p1 = d.toLocaleTimeString().split(' ');
-    var p2 = p1[0].split(':');
+    let d = new Date(tm);
+    let p1 = d.toLocaleTimeString().split(' ');
+    let p2 = p1[0].split(':');
     p2 = p2.slice(0, 2);
     return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
 }
-var MediaControl = /** @class */ (function () {
+class MediaControl {
     /**
      *
      * @param element
      * @param changeFunc
      * @param mediaConfig
      */
-    function MediaControl(element, changeFunc, mediaConfig) {
-        var _this = this;
-        if (changeFunc === void 0) { changeFunc = function () {
-            return;
-        }; }
-        if (mediaConfig === void 0) { mediaConfig = {}; }
+    constructor(element, changeFunc = () => {
+        return;
+    }, mediaConfig = {}) {
         mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;
         mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;
         mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;
@@ -56,34 +53,34 @@ var MediaControl = /** @class */ (function () {
         this._max = undefined;
         this._step = undefined;
         this._playing = false;
-        var htmlStr = '<span class="media-player-button media-back"></span>' +
+        let htmlStr = '<span class="media-player-button media-back"></span>' +
             '<span class="media-player-button media-play"></span>' +
             '<span class="media-player-button media-pause media-disabled"></span>' +
             '<span class="media-player-button media-stop media-disabled" ></span>' +
             '<span class="media-player-button media-ahead"></span>' +
-            "<input type=\"range\">" +
-            "<div class=\"media-control-value-label-container\">" +
-            "<span class=\"media-control-value-label-min\"></span>" +
-            "<span class=\"media-control-value-label-val\"></span>" +
-            "<span class=\"media-control-value-label-max\"></span>" +
-            "</div>";
+            `<input type="range">` +
+            `<div class="media-control-value-label-container">` +
+            `<span class="media-control-value-label-min"></span>` +
+            `<span class="media-control-value-label-val"></span>` +
+            `<span class="media-control-value-label-max"></span>` +
+            `</div>`;
         this._container.append(htmlStr);
         // let btnPause = this._container.find('.media-pause');
-        var btnPlay = this._container.find('.media-play');
+        let btnPlay = this._container.find('.media-play');
         this._$btnStop = this._container.find('.media-stop');
-        var btnAhead = this._container.find('.media-ahead');
-        var btnBack = this._container.find('.media-back');
+        let btnAhead = this._container.find('.media-ahead');
+        let btnBack = this._container.find('.media-back');
         this._$slider = this._container.find('input[type=range]');
         this._$valLabelMin = this._container.find('.media-control-value-label-min');
         this._$valLabelVal = this._container.find('.media-control-value-label-val');
         this._$valLabelMax = this._container.find('.media-control-value-label-max');
         this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);
-        range_change_1.rangeChange(this._$slider, function (newVal) {
-            _this.currentValue = newVal;
+        range_change_1.rangeChange(this._$slider, (newVal) => {
+            this.currentValue = newVal;
         }, 100);
-        var ___this = this;
+        let ___this = this;
         btnPlay.click(function () {
-            var $this = $(this);
+            let $this = $(this);
             $this.addClass('media-disabled');
             ___this._$btnStop.removeClass('media-disabled');
             btnAhead.addClass('media-locked');
@@ -96,7 +93,7 @@ var MediaControl = /** @class */ (function () {
         });
         this._$btnStop.click(function () {
             clearInterval(___this._interval);
-            var $this = $(this);
+            let $this = $(this);
             $this.addClass('media-disabled');
             btnPlay.removeClass('media-disabled');
             btnAhead.removeClass('media-locked');
@@ -111,63 +108,43 @@ var MediaControl = /** @class */ (function () {
             ___this.currentValue = ___this.currentValue - ___this._step;
         });
     }
-    MediaControl.prototype.stopPlaying = function () {
+    stopPlaying() {
         if (this._playing) {
             this._$btnStop.trigger('click');
         }
-    };
-    Object.defineProperty(MediaControl.prototype, "playing", {
-        get: function () {
-            return this._playing;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "min", {
-        get: function () {
-            return this._min;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "max", {
-        get: function () {
-            return this._max;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "step", {
-        get: function () {
-            return this._step;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MediaControl.prototype, "currentValue", {
-        get: function () {
-            return this._currentValue;
-        },
-        set: function (newValue) {
-            if (newValue > this._max) {
-                newValue = this._min;
-            }
-            else if (newValue < this._min) {
-                newValue = this._max;
-            }
-            this._currentValue = newValue;
-            this._$slider.val(this._currentValue.toFixed(2));
-            if (this._showAsDate) {
-                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            }
-            else {
-                this._$valLabelVal.html(this.currentValue.toString());
-            }
-            this._changeFunc(newValue);
-        },
-        enumerable: true,
-        configurable: true
-    });
+    }
+    get playing() {
+        return this._playing;
+    }
+    get min() {
+        return this._min;
+    }
+    get max() {
+        return this._max;
+    }
+    get step() {
+        return this._step;
+    }
+    get currentValue() {
+        return this._currentValue;
+    }
+    set currentValue(newValue) {
+        if (newValue > this._max) {
+            newValue = this._min;
+        }
+        else if (newValue < this._min) {
+            newValue = this._max;
+        }
+        this._currentValue = newValue;
+        this._$slider.val(this._currentValue.toFixed(2));
+        if (this._showAsDate) {
+            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
+        }
+        else {
+            this._$valLabelVal.html(this.currentValue.toString());
+        }
+        this._changeFunc(newValue);
+    }
     /**
      * set min and max value with step
      * @param {number} newMin the new min
@@ -175,7 +152,7 @@ var MediaControl = /** @class */ (function () {
      * @param {number} [newValue=newMin] the value to set
      * @param {number} [newStep=(newMax-newMin)/20] step value
      */
-    MediaControl.prototype.setMinMaxValueStep = function (newMin, newMax, newValue, newStep) {
+    setMinMaxValueStep(newMin, newMax, newValue, newStep) {
         this._min = newMin;
         this._max = newMax;
         newValue = typeof newValue == 'number' ? newValue : newMin;
@@ -196,20 +173,15 @@ var MediaControl = /** @class */ (function () {
             this._$valLabelVal.html(this.currentValue.toString());
             this._$valLabelMax.html(this._max.toString());
         }
-    };
-    Object.defineProperty(MediaControl.prototype, "changeFunction", {
-        /**
-         *
-         * @param {mediaCallback} newFunc the callback on change
-         */
-        set: function (newFunc) {
-            this._changeFunc = newFunc;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return MediaControl;
-}());
+    }
+    /**
+     *
+     * @param {mediaCallback} newFunc the callback on change
+     */
+    set changeFunction(newFunc) {
+        this._changeFunc = newFunc;
+    }
+}
 exports.MediaControl = MediaControl;
 nm.MediaControl = MediaControl;
 //# sourceMappingURL=media-control.js.map
\ No newline at end of file
diff --git a/dist/domUtil/media-control.js.map b/dist/domUtil/media-control.js.map
index 0d166a3..03478f5 100644
--- a/dist/domUtil/media-control.js.map
+++ b/dist/domUtil/media-control.js.map
@@ -1 +1 @@
-{"version":3,"file":"media-control.js","sourceRoot":"","sources":["../../src/domUtil/media-control.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('domUtil');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm: number) {\r\n    \"use strict\";\r\n    let d = new Date(tm);\r\n    let p1 = d.toLocaleTimeString().split(' ');\r\n    let p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\nexport interface changeFunction {\r\n    (newVal?: number): void;\r\n}\r\n\r\nexport interface mediaRangeConfig {\r\n    min?: number;\r\n    max?: number;\r\n    val?: number;\r\n    step?: number;\r\n    playInterval?: number;\r\n    showAsDate?: boolean;\r\n}\r\n\r\n\r\nexport class MediaControl {\r\n    _container: JQuery;\r\n    _min: number;\r\n    _max: number;\r\n    _playInterval: number;\r\n    _step: number;\r\n    _currentValue: number;\r\n\r\n    _playing: boolean;\r\n\r\n    _$btnStop: JQuery;\r\n    _$slider: JQuery;\r\n    _$valLabelVal: JQuery;\r\n    _$valLabelMin: JQuery;\r\n    _$valLabelMax: JQuery;\r\n    _interval: number;\r\n    _showAsDate: boolean;\r\n\r\n    _changeFunc: changeFunction;\r\n\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    constructor(element: JQuery | HTMLElement | string,\r\n                changeFunc: changeFunction = (): void => {\r\n                    return;\r\n                },\r\n                mediaConfig: mediaRangeConfig = {}) {\r\n\r\n        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;\r\n        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;\r\n        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;\r\n        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;\r\n        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;\r\n        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;\r\n\r\n        if (typeof element == 'string') {\r\n            this._container = $('#' + element);\r\n        }\r\n        else if (typeof (element as HTMLElement).style !== 'undefined') {\r\n            this._container = $(element);\r\n        } else {\r\n            this._container = element as JQuery;\r\n        }\r\n\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n\r\n        this._showAsDate = mediaConfig.showAsDate;\r\n\r\n        this._currentValue = undefined;\r\n        this._min = undefined;\r\n        this._max = undefined;\r\n        this._step = undefined;\r\n        this._playing = false;\r\n\r\n        let htmlStr =\r\n            '<span class=\"media-player-button media-back\"></span>' +\r\n            '<span class=\"media-player-button media-play\"></span>' +\r\n            '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n            '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n            '<span class=\"media-player-button media-ahead\"></span>' +\r\n            `<input type=\"range\">` +\r\n            `<div class=\"media-control-value-label-container\">` +\r\n            `<span class=\"media-control-value-label-min\"></span>` +\r\n            `<span class=\"media-control-value-label-val\"></span>` +\r\n            `<span class=\"media-control-value-label-max\"></span>` +\r\n            `</div>`;\r\n\r\n        this._container.append(htmlStr);\r\n\r\n        // let btnPause = this._container.find('.media-pause');\r\n        let btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        let btnAhead = this._container.find('.media-ahead');\r\n        let btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\r\n\r\n        this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n        this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n        this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n\r\n        rangeChange(this._$slider, (newVal) => {\r\n            this.currentValue = newVal;\r\n        }, 100);\r\n\r\n        let ___this = this;\r\n\r\n        btnPlay.click(function () {\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            ___this._$btnStop.removeClass('media-disabled');\r\n            btnAhead.addClass('media-locked');\r\n            btnBack.addClass('media-locked');\r\n            ___this._$slider.prop('disabled', true);\r\n            ___this._playing = true;\r\n\r\n            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            btnPlay.removeClass('media-disabled');\r\n            btnAhead.removeClass('media-locked');\r\n            btnBack.removeClass('media-locked');\r\n            ___this._$slider.prop('disabled', false);\r\n            ___this._playing = false;\r\n        });\r\n\r\n        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n\r\n    stopPlaying() {\r\n        if (this._playing) {\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    }\r\n\r\n    get playing() {\r\n        return this._playing;\r\n    }\r\n\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    get step() {\r\n        return this._step;\r\n    }\r\n\r\n    get currentValue() {\r\n        return this._currentValue;\r\n    }\r\n\r\n    set currentValue(newValue) {\r\n        if (newValue > this._max) {\r\n            newValue = this._min;\r\n        } else if (newValue < this._min) {\r\n            newValue = this._max;\r\n        }\r\n        this._currentValue = newValue;\r\n        this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n        } else {\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n        }\r\n\r\n        this._changeFunc(newValue);\r\n    }\r\n\r\n    /**\r\n     * set min and max value with step\r\n     * @param {number} newMin the new min\r\n     * @param {number} newMax the new mas\r\n     * @param {number} [newValue=newMin] the value to set\r\n     * @param {number} [newStep=(newMax-newMin)/20] step value\r\n     */\r\n    setMinMaxValueStep(newMin: number, newMax: number, newValue: number, newStep: number) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;\r\n\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\r\n\r\n        this._$slider.prop('min', this.min.toString());\r\n        this._$slider.prop('max', this.max.toString());\r\n        this._$slider.prop('step', this.step.toString());\r\n        this._$slider.val(this.currentValue.toString());\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n        } else {\r\n            this._$valLabelMin.html(this._min.toString());\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n            this._$valLabelMax.html(this._max.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {mediaCallback} newFunc the callback on change\r\n     */\r\n    set changeFunction(newFunc: changeFunction) {\r\n        this._changeFunc = newFunc;\r\n    }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"media-control.js","sourceRoot":"","sources":["../../src/domUtil/media-control.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport {rangeChange} from './range-change';\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('domUtil');\r\n\r\n/**\r\n * @callback mediaCallback\r\n * @param {number} tm\r\n */\r\n\r\nfunction timeToLocalDateString(tm: number) {\r\n    \"use strict\";\r\n    let d = new Date(tm);\r\n    let p1 = d.toLocaleTimeString().split(' ');\r\n    let p2 = p1[0].split(':');\r\n    p2 = p2.slice(0, 2);\r\n\r\n    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];\r\n}\r\n\r\nexport interface changeFunction {\r\n    (newVal?: number): void;\r\n}\r\n\r\nexport interface mediaRangeConfig {\r\n    min?: number;\r\n    max?: number;\r\n    val?: number;\r\n    step?: number;\r\n    playInterval?: number;\r\n    showAsDate?: boolean;\r\n}\r\n\r\n\r\nexport class MediaControl {\r\n    _container: JQuery;\r\n    _min: number;\r\n    _max: number;\r\n    _playInterval: number;\r\n    _step: number;\r\n    _currentValue: number;\r\n\r\n    _playing: boolean;\r\n\r\n    _$btnStop: JQuery;\r\n    _$slider: JQuery;\r\n    _$valLabelVal: JQuery;\r\n    _$valLabelMin: JQuery;\r\n    _$valLabelMax: JQuery;\r\n    _interval: number;\r\n    _showAsDate: boolean;\r\n\r\n    _changeFunc: changeFunction;\r\n\r\n    /**\r\n     *\r\n     * @param element\r\n     * @param changeFunc\r\n     * @param mediaConfig\r\n     */\r\n    constructor(element: JQuery | HTMLElement | string,\r\n                changeFunc: changeFunction = (): void => {\r\n                    return;\r\n                },\r\n                mediaConfig: mediaRangeConfig = {}) {\r\n\r\n        mediaConfig.min = typeof mediaConfig.min == 'number' ? mediaConfig.min : 0;\r\n        mediaConfig.max = typeof mediaConfig.max == 'number' ? mediaConfig.max : 100;\r\n        mediaConfig.val = typeof mediaConfig.val == 'number' ? mediaConfig.val : 0;\r\n        mediaConfig.step = typeof mediaConfig.step == 'number' ? mediaConfig.step : 5;\r\n        mediaConfig.playInterval = typeof mediaConfig.playInterval == 'number' ? mediaConfig.playInterval : 500;\r\n        mediaConfig.showAsDate = typeof mediaConfig.showAsDate == 'boolean' ? mediaConfig.showAsDate : false;\r\n\r\n        if (typeof element == 'string') {\r\n            this._container = $('#' + element);\r\n        }\r\n        else if (typeof (element as HTMLElement).style !== 'undefined') {\r\n            this._container = $(element);\r\n        } else {\r\n            this._container = element as JQuery;\r\n        }\r\n\r\n        this._container.addClass('media-control-container');\r\n        this._playInterval = mediaConfig.playInterval;\r\n        this._changeFunc = changeFunc;\r\n\r\n        this._showAsDate = mediaConfig.showAsDate;\r\n\r\n        this._currentValue = undefined;\r\n        this._min = undefined;\r\n        this._max = undefined;\r\n        this._step = undefined;\r\n        this._playing = false;\r\n\r\n        let htmlStr =\r\n            '<span class=\"media-player-button media-back\"></span>' +\r\n            '<span class=\"media-player-button media-play\"></span>' +\r\n            '<span class=\"media-player-button media-pause media-disabled\"></span>' +\r\n            '<span class=\"media-player-button media-stop media-disabled\" ></span>' +\r\n            '<span class=\"media-player-button media-ahead\"></span>' +\r\n            `<input type=\"range\">` +\r\n            `<div class=\"media-control-value-label-container\">` +\r\n            `<span class=\"media-control-value-label-min\"></span>` +\r\n            `<span class=\"media-control-value-label-val\"></span>` +\r\n            `<span class=\"media-control-value-label-max\"></span>` +\r\n            `</div>`;\r\n\r\n        this._container.append(htmlStr);\r\n\r\n        // let btnPause = this._container.find('.media-pause');\r\n        let btnPlay = this._container.find('.media-play');\r\n        this._$btnStop = this._container.find('.media-stop');\r\n        let btnAhead = this._container.find('.media-ahead');\r\n        let btnBack = this._container.find('.media-back');\r\n        this._$slider = this._container.find('input[type=range]');\r\n\r\n        this._$valLabelMin = this._container.find('.media-control-value-label-min');\r\n        this._$valLabelVal = this._container.find('.media-control-value-label-val');\r\n        this._$valLabelMax = this._container.find('.media-control-value-label-max');\r\n\r\n        this.setMinMaxValueStep(mediaConfig.min, mediaConfig.max, mediaConfig.val, mediaConfig.step);\r\n\r\n        rangeChange(this._$slider, (newVal) => {\r\n            this.currentValue = newVal;\r\n        }, 100);\r\n\r\n        let ___this = this;\r\n\r\n        btnPlay.click(function () {\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            ___this._$btnStop.removeClass('media-disabled');\r\n            btnAhead.addClass('media-locked');\r\n            btnBack.addClass('media-locked');\r\n            ___this._$slider.prop('disabled', true);\r\n            ___this._playing = true;\r\n\r\n            ___this._interval = setInterval(function () {\r\n                ___this.currentValue += ___this._step;\r\n            }, ___this._playInterval);\r\n        });\r\n\r\n        this._$btnStop.click(function () {\r\n            clearInterval(___this._interval);\r\n            let $this = $(this);\r\n            $this.addClass('media-disabled');\r\n            btnPlay.removeClass('media-disabled');\r\n            btnAhead.removeClass('media-locked');\r\n            btnBack.removeClass('media-locked');\r\n            ___this._$slider.prop('disabled', false);\r\n            ___this._playing = false;\r\n        });\r\n\r\n        btnAhead.click(function () {\r\n            ___this.currentValue = ___this.currentValue + ___this._step;\r\n        });\r\n\r\n        btnBack.click(function () {\r\n            ___this.currentValue = ___this.currentValue - ___this._step;\r\n        });\r\n    }\r\n\r\n    stopPlaying() {\r\n        if (this._playing) {\r\n            this._$btnStop.trigger('click');\r\n        }\r\n    }\r\n\r\n    get playing() {\r\n        return this._playing;\r\n    }\r\n\r\n    get min() {\r\n        return this._min;\r\n    }\r\n\r\n    get max() {\r\n        return this._max;\r\n    }\r\n\r\n    get step() {\r\n        return this._step;\r\n    }\r\n\r\n    get currentValue() {\r\n        return this._currentValue;\r\n    }\r\n\r\n    set currentValue(newValue) {\r\n        if (newValue > this._max) {\r\n            newValue = this._min;\r\n        } else if (newValue < this._min) {\r\n            newValue = this._max;\r\n        }\r\n        this._currentValue = newValue;\r\n        this._$slider.val(this._currentValue.toFixed(2));\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n        } else {\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n        }\r\n\r\n        this._changeFunc(newValue);\r\n    }\r\n\r\n    /**\r\n     * set min and max value with step\r\n     * @param {number} newMin the new min\r\n     * @param {number} newMax the new mas\r\n     * @param {number} [newValue=newMin] the value to set\r\n     * @param {number} [newStep=(newMax-newMin)/20] step value\r\n     */\r\n    setMinMaxValueStep(newMin: number, newMax: number, newValue: number, newStep: number) {\r\n        this._min = newMin;\r\n        this._max = newMax;\r\n\r\n        newValue = typeof newValue == 'number' ? newValue : newMin;\r\n        newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;\r\n\r\n        this._currentValue = newValue;\r\n        this._step = newStep;\r\n\r\n        this._$slider.prop('min', this.min.toString());\r\n        this._$slider.prop('max', this.max.toString());\r\n        this._$slider.prop('step', this.step.toString());\r\n        this._$slider.val(this.currentValue.toString());\r\n\r\n        if (this._showAsDate) {\r\n            this._$valLabelMin.html(timeToLocalDateString(this._min));\r\n            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));\r\n            this._$valLabelMax.html(timeToLocalDateString(this._max));\r\n        } else {\r\n            this._$valLabelMin.html(this._min.toString());\r\n            this._$valLabelVal.html(this.currentValue.toString());\r\n            this._$valLabelMax.html(this._max.toString());\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {mediaCallback} newFunc the callback on change\r\n     */\r\n    set changeFunction(newFunc: changeFunction) {\r\n        this._changeFunc = newFunc;\r\n    }\r\n}\r\n\r\nnm.MediaControl = MediaControl;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/domUtil/range-change.js b/dist/domUtil/range-change.js
index dfe78e8..20e8d51 100644
--- a/dist/domUtil/range-change.js
+++ b/dist/domUtil/range-change.js
@@ -1,25 +1,25 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('domUtil');
-var mouseIn = false;
-var mouseDown = false;
-var timeout = null;
-var dragged = false;
-var lastVal;
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('domUtil');
+let mouseIn = false;
+let mouseDown = false;
+let timeout = null;
+let dragged = false;
+let lastVal;
 /**
  * Created by gavorhes on 11/2/2015.
  */
 function triggerCallback(callback, evt) {
     "use strict";
-    var val = parseFloat(this.value);
-    var min = parseFloat(this.min);
-    var max = parseFloat(this.max);
-    var step = parseFloat(this.step);
+    let val = parseFloat(this.value);
+    let min = parseFloat(this.min);
+    let max = parseFloat(this.max);
+    let step = parseFloat(this.step);
     if (max - val < step) {
         val = max;
     }
-    var percent = (val - min) / (max - min);
+    let percent = (val - min) / (max - min);
     if (typeof lastVal == 'number' && val == lastVal) {
         return;
     }
@@ -67,7 +67,7 @@ function rangeChange($slider, callback, changeTimeout) {
         if (timeout != null) {
             clearTimeout(timeout);
         }
-        var _this = this;
+        let _this = this;
         timeout = setTimeout(function () {
             triggerCallback.call(_this, callback, evt);
             timeout = null;
diff --git a/dist/domUtil/range-change.js.map b/dist/domUtil/range-change.js.map
index efe7df2..164f35d 100644
--- a/dist/domUtil/range-change.js.map
+++ b/dist/domUtil/range-change.js.map
@@ -1 +1 @@
-{"version":3,"file":"range-change.js","sourceRoot":"","sources":["../../src/domUtil/range-change.ts"],"names":[],"mappings":"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","sourcesContent":["import provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {ChangeEvent} from \"react\";\r\n\r\nconst nm = provide('domUtil');\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout: number = null;\r\nlet dragged = false;\r\nlet lastVal: number;\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n    /**\r\n     *\r\n     * @param newValue new value of the slider\r\n     * @param ratio ratio from low to high, 0 to 1\r\n     * @param evt the original event\r\n     */\r\n    (newValue: number, ratio: number, evt: ChangeEvent<HTMLInputElement>): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt: ChangeEvent<HTMLInputElement>) {\r\n    \"use strict\";\r\n\r\n    let val = parseFloat(this.value);\r\n    let min = parseFloat(this.min);\r\n    let max = parseFloat(this.max);\r\n    let step = parseFloat(this.step);\r\n\r\n    if (max - val < step){\r\n        val = max;\r\n    }\r\n\r\n    let percent =  (val - min) / (max - min);\r\n\r\n    if (typeof lastVal == 'number' && val ==  lastVal){\r\n        return;\r\n    }\r\n    lastVal = val;\r\n    callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param  $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousemove(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         * @this {HTMLElement}\r\n         */\r\n        function (evt) {\r\n        if (!(mouseIn && mouseDown)) {\r\n            return;\r\n        }\r\n\r\n        dragged = true;\r\n\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n\r\n        }, changeTimeout);\r\n    });\r\n\r\n    $slider.keyup(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         */\r\n        function (evt) {\r\n        if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n            triggerCallback.call(this, callback, evt);\r\n        }\r\n    });\r\n\r\n    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n\r\n    return this;\r\n}\r\n\r\nnm.rangeChange = rangeChange;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"range-change.js","sourceRoot":"","sources":["../../src/domUtil/range-change.ts"],"names":[],"mappings":"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","sourcesContent":["import provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {ChangeEvent} from \"react\";\r\n\r\nconst nm = provide('domUtil');\r\n\r\nlet mouseIn = false;\r\nlet mouseDown = false;\r\nlet timeout: number = null;\r\nlet dragged = false;\r\nlet lastVal: number;\r\n\r\n\r\n/**\r\n * callback on range change interaction, context of this is the firing dom element\r\n * @callback rangeChangeCallback\r\n * @param {number} newValue\r\n * @param {number} ratio value from 0 to 1 relative of the value to the min and max\r\n * @param {object} evt\r\n */\r\n\r\n/***\r\n * callback funcion after the slider has been moved\r\n */\r\nexport interface rangeChangedCallback{\r\n    /**\r\n     *\r\n     * @param newValue new value of the slider\r\n     * @param ratio ratio from low to high, 0 to 1\r\n     * @param evt the original event\r\n     */\r\n    (newValue: number, ratio: number, evt: ChangeEvent<HTMLInputElement>): any\r\n}\r\n\r\n\r\n/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nfunction triggerCallback(callback: rangeChangedCallback, evt: ChangeEvent<HTMLInputElement>) {\r\n    \"use strict\";\r\n\r\n    let val = parseFloat(this.value);\r\n    let min = parseFloat(this.min);\r\n    let max = parseFloat(this.max);\r\n    let step = parseFloat(this.step);\r\n\r\n    if (max - val < step){\r\n        val = max;\r\n    }\r\n\r\n    let percent =  (val - min) / (max - min);\r\n\r\n    if (typeof lastVal == 'number' && val ==  lastVal){\r\n        return;\r\n    }\r\n    lastVal = val;\r\n    callback(val, percent, evt);\r\n}\r\n\r\n\r\n\r\n/**\r\n * Add a variety of listeners for range inputs applied to a common callback\r\n * @param  $slider - jquery reference to the slider\r\n * @param {rangeChangeCallback} callback - the callback\r\n * @param {number} [changeTimeout=75] before the callback is called\r\n * @this {jQuery}\r\n * @returns {jQuery} the jQuery object\r\n */\r\nexport function rangeChange ($slider: JQuery, callback: rangeChangedCallback, changeTimeout: number) {\r\n\r\n    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;\r\n\r\n    $slider.mouseenter(function () {\r\n        mouseIn = true;\r\n    });\r\n\r\n    $slider.mouseleave(function () {\r\n        mouseIn = false;\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousedown(function () {\r\n        mouseDown = true;\r\n    });\r\n\r\n    $slider.mouseup(function () {\r\n        mouseDown = false;\r\n    });\r\n\r\n    $slider.mousemove(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         * @this {HTMLElement}\r\n         */\r\n        function (evt) {\r\n        if (!(mouseIn && mouseDown)) {\r\n            return;\r\n        }\r\n\r\n        dragged = true;\r\n\r\n        if (lastVal == this['value']) {\r\n            return;\r\n        }\r\n        lastVal = this['value'];\r\n\r\n        if (timeout != null) {\r\n            clearTimeout(timeout);\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        timeout = setTimeout(function () {\r\n            triggerCallback.call(_this, callback, evt);\r\n            timeout = null;\r\n\r\n        }, changeTimeout);\r\n    });\r\n\r\n    $slider.keyup(\r\n        /**\r\n         *\r\n         * @param {object} evt - event properties\r\n         */\r\n        function (evt) {\r\n        if (evt.keyCode == 37 || evt.keyCode == 39) {\r\n            triggerCallback.call(this, callback, evt);\r\n        }\r\n    });\r\n\r\n    $slider.change(function (evt) {\r\n        if (dragged) {\r\n            dragged = false;\r\n\r\n            return;\r\n        }\r\n        triggerCallback.call(this, callback, evt);\r\n    });\r\n\r\n    return this;\r\n}\r\n\r\nnm.rangeChange = rangeChange;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/import-queryui.js b/dist/import-queryui.js
index 3585f93..2f80156 100644
--- a/dist/import-queryui.js
+++ b/dist/import-queryui.js
@@ -1,6 +1,6 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var $ = require("jquery");
+const $ = require("jquery");
 window['$'] = window['jQuery'] = $;
 require("jqueryui");
 //# sourceMappingURL=import-queryui.js.map
\ No newline at end of file
diff --git a/dist/import-queryui.js.map b/dist/import-queryui.js.map
index 5d41ab2..37f07fd 100644
--- a/dist/import-queryui.js.map
+++ b/dist/import-queryui.js.map
@@ -1 +1 @@
-{"version":3,"file":"import-queryui.js","sourceRoot":"","sources":["../src/import-queryui.ts"],"names":[],"mappings":";;AAAA,0BAA6B;AAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,oBAAkB","sourcesContent":["import $ = require(\"jquery\");\r\nwindow['$'] = window['jQuery'] = $;\r\nimport 'jqueryui';\r\n"]}
\ No newline at end of file
+{"version":3,"file":"import-queryui.js","sourceRoot":"","sources":["../src/import-queryui.ts"],"names":[],"mappings":";;AAAA,4BAA6B;AAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,oBAAkB","sourcesContent":["import $ = require(\"jquery\");\r\nwindow['$'] = window['jQuery'] = $;\r\nimport 'jqueryui';\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerBase.js b/dist/layers/LayerBase.js
index 954c378..b4912fb 100644
--- a/dist/layers/LayerBase.js
+++ b/dist/layers/LayerBase.js
@@ -1,15 +1,15 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var zoomResolutionConvert = require("../olHelpers/zoomResolutionConvert");
-var provide_1 = require("../util/provide");
-var makeGuid_1 = require("../util/makeGuid");
-var $ = require("jquery");
-var nm = provide_1.default('layers');
+const zoomResolutionConvert = require("../olHelpers/zoomResolutionConvert");
+const provide_1 = require("../util/provide");
+const makeGuid_1 = require("../util/makeGuid");
+const $ = require("jquery");
+const nm = provide_1.default('layers');
 /**
  * The base layer class
  * @abstract
  */
-var LayerBase = /** @class */ (function () {
+class LayerBase {
     /**
      * The base layer for all others
      * @param {string} url - url for source
@@ -27,8 +27,7 @@ var LayerBase = /** @class */ (function () {
      * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
      * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
      */
-    function LayerBase(url, options) {
-        if (options === void 0) { options = {}; }
+    constructor(url, options = {}) {
         options = options || {};
         if (typeof url !== 'string') {
             throw 'Invalid URL';
@@ -67,12 +66,12 @@ var LayerBase = /** @class */ (function () {
         };
         this._legendContent = '';
         if (this._legendCheckbox) {
-            this._legendContent += "<input type=\"checkbox\" " + (this.visible ? 'checked' : '') + " " +
-                ("class=\"legend-check\" id=\"" + this.id + "-legend-layer-check\"><span></span>");
-            this._legendContent += "<label for=\"" + this.id + "-legend-layer-check\" class=\"legend-layer-name\">" + this.name + "</label>";
+            this._legendContent += `<input type="checkbox" ${this.visible ? 'checked' : ''} ` +
+                `class="legend-check" id="${this.id}-legend-layer-check"><span></span>`;
+            this._legendContent += `<label for="${this.id}-legend-layer-check" class="legend-layer-name">${this.name}</label>`;
         }
         else {
-            this._legendContent += "<label class=\"legend-layer-name\">" + this.name + "</label>";
+            this._legendContent += `<label class="legend-layer-name">${this.name}</label>`;
         }
         this._$legendDiv = null;
         this._applyCollapseCalled = false;
@@ -83,7 +82,7 @@ var LayerBase = /** @class */ (function () {
      * @protected
      * @returns {boolean} if already loaded
      */
-    LayerBase.prototype._load = function () {
+    _load() {
         if (this.loaded == true) {
             return true;
         }
@@ -91,51 +90,50 @@ var LayerBase = /** @class */ (function () {
             this._loaded = true;
             return false;
         }
-    };
+    }
     /**
      * Get the legend html, be sure to only add to the DOM once
      * @returns {string} html for layer wrapped in a div
      */
-    LayerBase.prototype.getLegendDiv = function () {
-        return "<div class=\"legend-layer-div\" id=\"" + this.id + "-legend-layer-div\">" + this._legendContent + "</div>";
-    };
+    getLegendDiv() {
+        return `<div class="legend-layer-div" id="${this.id}-legend-layer-div">${this._legendContent}</div>`;
+    }
     /**
      *
      * @param additionalContent - additional content to add to legend
      * @private
      */
-    LayerBase.prototype._addLegendContent = function (additionalContent) {
-        if (additionalContent === void 0) { additionalContent = ''; }
-        var addCollapse = additionalContent.indexOf('<ul>') > -1;
+    _addLegendContent(additionalContent = '') {
+        let addCollapse = additionalContent.indexOf('<ul>') > -1;
         if (addCollapse) {
             additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
         }
         this._legendContent += additionalContent;
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        this._$legendDiv = $(`#${this.id}-legend-layer-div`);
         if (this._$legendDiv.length > 0) {
             this._$legendDiv.append(additionalContent);
             this.applyCollapse();
         }
-    };
+    }
     /**
      * add additional content to the legend
      * @param {string} [additionalContent=] - additonal content to add
      */
-    LayerBase.prototype.addLegendContent = function (additionalContent) {
+    addLegendContent(additionalContent) {
         this._addLegendContent(additionalContent);
-    };
-    LayerBase.prototype.applyCollapse = function () {
+    }
+    applyCollapse() {
         if (this._applyCollapseCalled) {
             console.log('collapse already applied');
             return undefined;
         }
-        this._$legendDiv = $("#" + this.id + "-legend-layer-div");
+        this._$legendDiv = $(`#${this.id}-legend-layer-div`);
         if (this._$legendDiv.length > 0) {
-            var $expander = this._$legendDiv.find('.legend-items-expander');
+            let $expander = this._$legendDiv.find('.legend-items-expander');
             if ($expander.length > 0) {
                 this._applyCollapseCalled = true;
                 $expander.click(function () {
-                    var $this = $(this);
+                    let $this = $(this);
                     $this.siblings('ul').slideToggle();
                     if ($this.hasClass('legend-layer-group-collapsed')) {
                         $this.removeClass('legend-layer-group-collapsed');
@@ -151,147 +149,107 @@ var LayerBase = /** @class */ (function () {
                 }
             }
         }
-    };
+    }
     /**
      * trick to refresh the layer
      */
-    LayerBase.prototype.refresh = function () {
+    refresh() {
         if (this.source) {
             this.source.refresh();
         }
-    };
-    Object.defineProperty(LayerBase.prototype, "id", {
-        get: function () {
-            return this._id;
-        },
-        set: function (newId) {
-            this._id = newId;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "animate", {
-        get: function () {
-            return this._animate;
-        },
-        set: function (animate) {
-            this._animate = animate;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "legendContent", {
-        /**
-         * get the legend content
-         * @type {string}
-         */
-        get: function () {
-            return this._legendContent;
-        },
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        set: function (newVal) {
-            this._legendContent = newVal;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "params", {
-        /**
-         * get the map get params
-         * @type {object}
-         */
-        get: function () {
-            return this._params;
-        },
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        set: function (newParams) {
-            this._params = newParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minResolution", {
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxResolution", {
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxResolution;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "minZoom", {
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._minZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "maxZoom", {
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-        get: function () {
-            return this._maxZoom;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "url", {
-        /**
-         * get the url
-         * @type {string}
-         */
-        get: function () {
-            return this._url;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "visible", {
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * set the visibility
-         * @param visibility
-         */
-        set: function (visibility) {
-            this.setVisible(visibility);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setVisible = function (visibility) {
+    }
+    get id() {
+        return this._id;
+    }
+    set id(newId) {
+        this._id = newId;
+    }
+    get animate() {
+        return this._animate;
+    }
+    set animate(animate) {
+        this._animate = animate;
+    }
+    /**
+     * get the legend content
+     * @type {string}
+     */
+    get legendContent() {
+        return this._legendContent;
+    }
+    /**
+     * set the legend content directly
+     * @param {string} newVal - new content
+     * @protected
+     */
+    set legendContent(newVal) {
+        this._legendContent = newVal;
+    }
+    /**
+     * get the map get params
+     * @type {object}
+     */
+    get params() {
+        return this._params;
+    }
+    /**
+     * set the map get params
+     * @param {object} newParams - new get params
+     * @protected
+     */
+    set params(newParams) {
+        this._params = newParams;
+    }
+    /**
+     * get the minimum resolution
+     * @type {number|*}
+     */
+    get minResolution() {
+        return this._minResolution;
+    }
+    /**
+     * get the maximum resolution
+     * @type {number|*}
+     */
+    get maxResolution() {
+        return this._maxResolution;
+    }
+    /**
+     * get min zoom
+     * @type {number|*}
+     */
+    get minZoom() {
+        return this._minZoom;
+    }
+    /**
+     * get max zoom
+     * @type {number|*}
+     */
+    get maxZoom() {
+        return this._maxZoom;
+    }
+    /**
+     * get the url
+     * @type {string}
+     */
+    get url() {
+        return this._url;
+    }
+    /**
+     * Get the layer visibility
+     * @type {boolean}
+     */
+    get visible() {
+        return this._visible;
+    }
+    /**
+     * set the visibility
+     * @param visibility
+     */
+    set visible(visibility) {
+        this.setVisible(visibility);
+    }
+    setVisible(visibility) {
         this._visible = visibility;
         if (this.olLayer) {
             this.olLayer.setVisible(this._visible);
@@ -299,104 +257,79 @@ var LayerBase = /** @class */ (function () {
                 this._load();
             }
         }
-    };
-    Object.defineProperty(LayerBase.prototype, "opacity", {
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-        get: function () {
-            return this._opacity;
-        },
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        set: function (opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "name", {
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-        get: function () {
-            return this._name;
-        },
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        set: function (newName) {
-            this._name = newName;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "loaded", {
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-        get: function () {
-            return this._loaded;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBase.prototype, "source", {
-        /**
-         * get the layer source
-         * @type {*}
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getSource = function () {
+    }
+    /**
+     * Get the layer opacity
+     * @type {number}
+     */
+    get opacity() {
+        return this._opacity;
+    }
+    /**
+     * Set the layer opacity
+     * @param {number} opacity - layer opacity
+     */
+    set opacity(opacity) {
+        this._opacity = opacity;
+        if (this.olLayer) {
+            this.olLayer.setOpacity(this._opacity);
+        }
+    }
+    /**
+     * Get the layer name
+     * @type {string}
+     */
+    get name() {
+        return this._name;
+    }
+    /**
+     * set the layer name
+     * @param {string} newName - the new name
+     */
+    set name(newName) {
+        this._name = newName;
+    }
+    /**
+     * Check if the layer is loaded
+     * @type {boolean}
+     */
+    get loaded() {
+        return this._loaded;
+    }
+    /**
+     * get the layer source
+     * @type {*}
+     */
+    get source() {
+        return this.getSource();
+    }
+    getSource() {
         return this._source;
-    };
-    Object.defineProperty(LayerBase.prototype, "zIndex", {
-        /**
-         * get the z index
-         */
-        get: function () {
-            return this._zIndex;
-        },
-        /**
-         * set the z index
-         */
-        set: function (newZ) {
-            this._zIndex = newZ;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.setZIndex = function (newZ) {
-    };
-    Object.defineProperty(LayerBase.prototype, "olLayer", {
-        /**
-         * the the ol layer
-         */
-        get: function () {
-            return this.getOlLayer();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBase.prototype.getOlLayer = function () {
+    }
+    /**
+     * get the z index
+     */
+    get zIndex() {
+        return this._zIndex;
+    }
+    /**
+     * set the z index
+     */
+    set zIndex(newZ) {
+        this._zIndex = newZ;
+    }
+    setZIndex(newZ) {
+    }
+    /**
+     * the the ol layer
+     */
+    get olLayer() {
+        return this.getOlLayer();
+    }
+    getOlLayer() {
         return this._olLayer;
-    };
-    return LayerBase;
-}());
+    }
+}
 exports.LayerBase = LayerBase;
 nm.LayerBase = LayerBase;
 exports.default = LayerBase;
diff --git a/dist/layers/LayerBase.js.map b/dist/layers/LayerBase.js.map
index 98c3919..cc9bdfd 100644
--- a/dist/layers/LayerBase.js.map
+++ b/dist/layers/LayerBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBase.js","sourceRoot":"","sources":["../../src/layers/LayerBase.ts"],"names":[],"mappings":";;AAAA,0EAA4E;AAC5E,2CAAsC;AACtC,6CAAwC;AAGxC,0BAA6B;AAE7B,IAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAmB7B;;;GAGG;AACH;IA0BI;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAsB,GAAW,EAAE,OAA8B;QAA9B,wBAAA,EAAA,YAA8B;QAC7D,OAAO,GAAG,OAAO,IAAI,EAAsB,CAAC;QAE5C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,MAAM,aAAa,CAAC;SACvB;QACD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAGhB,IAAI,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,eAAe,GAAG,OAAO,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QACnG,IAAI,CAAC,eAAe,GAAG,OAAO,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAElG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,kBAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;SACrB;aAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;SACrB;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9E,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAEzB;;;WAGG;QACH,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE;YAC5C,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC;SAClC;QACD,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE9E,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,IAAI,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC;QAGF,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,cAAc,IAAI,+BAA0B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAG;iBAC7E,iCAA4B,IAAI,CAAC,EAAE,wCAAoC,CAAA,CAAC;YAC5E,IAAI,CAAC,cAAc,IAAI,kBAAe,IAAI,CAAC,EAAE,0DAAkD,IAAI,CAAC,IAAI,aAAU,CAAC;SACtH;aAAM;YACH,IAAI,CAAC,cAAc,IAAI,wCAAoC,IAAI,CAAC,IAAI,aAAU,CAAC;SAClF;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1G,CAAC;IAED;;;;OAIG;IACH,yBAAK,GAAL;QACI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC;SACf;aAAM;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED;;;OAGG;IACH,gCAAY,GAAZ;QACI,OAAO,0CAAqC,IAAI,CAAC,EAAE,4BAAsB,IAAI,CAAC,cAAc,WAAQ,CAAC;IACzG,CAAC;IAED;;;;OAIG;IACH,qCAAiB,GAAjB,UAAkB,iBAAoB;QAApB,kCAAA,EAAA,sBAAoB;QAElC,IAAI,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzD,IAAI,WAAW,EAAE;YACb,iBAAiB,GAAG,4EAA4E,GAAG,iBAAiB,CAAC;SACxH;QAED,IAAI,CAAC,cAAc,IAAI,iBAAiB,CAAC;QAEzC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,EAAE,sBAAmB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED;;;OAGG;IACH,oCAAgB,GAAhB,UAAiB,iBAAyB;QACtC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC;IAED,iCAAa,GAAb;QACI,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YAExC,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAI,IAAI,CAAC,EAAE,sBAAmB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAE7B,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEhE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBAEjC,SAAS,CAAC,KAAK,CAAC;oBACZ,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAEpB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAEnC,IAAI,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE;wBAChD,KAAK,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;wBAClD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBACzB;yBAAM;wBACH,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;wBAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBACzB;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC9B;aACJ;SACJ;IACL,CAAC;IAED;;OAEG;IACH,2BAAO,GAAP;QACI,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB;IACL,CAAC;IAED,sBAAI,yBAAE;aAAN;YACI,OAAO,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC;aAED,UAAO,KAAa;YAChB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACrB,CAAC;;;OAJA;IAMD,sBAAI,8BAAO;aAAX;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aAED,UAAY,OAAgB;YACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;;;OAJA;IAUD,sBAAI,oCAAa;QAJjB;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;QAED;;;;WAIG;aACH,UAAkB,MAAc;YAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QACjC,CAAC;;;OATA;IAeD,sBAAI,6BAAM;QAJV;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED;;;;WAIG;aACH,UAAW,SAA6B;YACpC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7B,CAAC;;;OATA;IAeD,sBAAI,oCAAa;QAJjB;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAMD,sBAAI,oCAAa;QAJjB;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAMD,sBAAI,8BAAO;QAJX;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;;;OAAA;IAMD,sBAAI,8BAAO;QAJX;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;;;OAAA;IAMD,sBAAI,0BAAG;QAJP;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;;;OAAA;IAMD,sBAAI,8BAAO;QAJX;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED;;;WAGG;aACH,UAAY,UAAmB;YAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;;;OARA;IAUS,8BAAU,GAApB,UAAqB,UAAmB;QACpC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;aAChB;SACJ;IACL,CAAC;IAOD,sBAAI,8BAAO;QAJX;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED;;;WAGG;aACH,UAAY,OAAe;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC1C;QACL,CAAC;;;OAXA;IAiBD,sBAAI,2BAAI;QAJR;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED;;;WAGG;aACH,UAAS,OAAe;YACpB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACzB,CAAC;;;OARA;IAcD,sBAAI,6BAAM;QAJV;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;;;OAAA;IAMD,sBAAI,6BAAM;QAJV;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;;;OAAA;IAGS,6BAAS,GAAnB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAKD,sBAAI,6BAAM;QAHV;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED;;WAEG;aACH,UAAW,IAAY;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;;;OAPA;IASS,6BAAS,GAAnB,UAAoB,IAAY;IAEhC,CAAC;IAKD,sBAAI,8BAAO;QAHX;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC;;;OAAA;IAES,8BAAU,GAApB;QACI,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IACL,gBAAC;AAAD,CAAC,AAxZD,IAwZC;AAxZqB,8BAAS;AA0Z/B,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;AACzB,kBAAe,SAAS,CAAC","sourcesContent":["import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {Vector, Source} from 'ol/source';\r\nimport Layer from 'ol/layer/Layer';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    protected constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent: string) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse(): void {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent(): string {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal: string) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params(): {[s: string]: any} {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams: {[s: string]: any}) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution(): number {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution(): number {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom(): number {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom(): number {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url(): string {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity(): number {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity: number) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name(): string {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName: string) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded():boolean {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerBase.js","sourceRoot":"","sources":["../../src/layers/LayerBase.ts"],"names":[],"mappings":"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","sourcesContent":["import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {Vector, Source} from 'ol/source';\r\nimport Layer from 'ol/layer/Layer';\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\nexport interface LayerBaseOptions{\r\n    id?: string;\r\n    name?: string;\r\n    opacity?: number;\r\n    visible?: boolean;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    params?: any;\r\n    zIndex?: number;\r\n    loadCallback?: Function;\r\n    legendCollapse?: boolean;\r\n    legendCheckbox?: boolean;\r\n    legendContent?: string;\r\n}\r\n\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nexport abstract class LayerBase {\r\n\r\n    protected _legendCheckbox: boolean;\r\n    protected _url: string;\r\n    protected _opacity: number;\r\n    protected _minZoom: number;\r\n    protected _maxZoom: number;\r\n    protected _visible: boolean;\r\n    protected _loaded: boolean;\r\n    protected _zIndex: number;\r\n    protected _legendContent: string;\r\n    protected _params: any;\r\n    protected _id: string;\r\n    protected _name: string;\r\n    protected _source: Source;\r\n    protected _animate: boolean;\r\n    protected _legendCollapse: boolean;\r\n    protected _maxResolution: number;\r\n    protected _minResolution: number;\r\n    protected  _$legendDiv: JQuery;\r\n    loadCallback: Function;\r\n    protected _olLayer: Layer;\r\n    protected _applyCollapseCalled: boolean;\r\n\r\n\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    protected constructor(url: string, options: LayerBaseOptions = {}) {\r\n        options = options || {} as LayerBaseOptions;\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n\r\n\r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n\r\n        this._source = undefined;\r\n\r\n        /**\r\n         *\r\n         * @protected\r\n         */\r\n        this._olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent='') {\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent: string) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse(): void {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh() {\r\n        if (this.source) {\r\n            this.source.refresh();\r\n        }\r\n    }\r\n\r\n    get id(): string{\r\n        return this._id;\r\n    }\r\n\r\n    set id(newId: string){\r\n        this._id = newId;\r\n    }\r\n\r\n    get animate(): boolean{\r\n        return this._animate;\r\n    }\r\n\r\n    set animate(animate: boolean){\r\n        this._animate = animate;\r\n    }\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent(): string {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal: string) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params(): {[s: string]: any} {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams: {[s: string]: any}) {\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution(): number {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution(): number {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom(): number {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom(): number {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url(): string {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible(): boolean {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * set the visibility\r\n     * @param visibility\r\n     */\r\n    set visible(visibility: boolean) {\r\n        this.setVisible(visibility);\r\n    }\r\n\r\n    protected setVisible(visibility: boolean) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity(): number {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity: number) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name(): string {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName: string) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded():boolean {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source(): Source {\r\n        return this.getSource();\r\n    }\r\n\r\n\r\n    protected getSource(): Source{\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     */\r\n    get zIndex(): number {\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     */\r\n    set zIndex(newZ: number) {\r\n        this._zIndex = newZ;\r\n    }\r\n\r\n    protected setZIndex(newZ: number){\r\n\r\n    }\r\n\r\n    /**\r\n     * the the ol layer\r\n     */\r\n    get olLayer(): Layer {\r\n        return this.getOlLayer();\r\n    }\r\n\r\n    protected getOlLayer(): Layer{\r\n        return this._olLayer;\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerBaseVector.js b/dist/layers/LayerBaseVector.js
index 4e9bcf2..d6cf250 100644
--- a/dist/layers/LayerBaseVector.js
+++ b/dist/layers/LayerBaseVector.js
@@ -1,33 +1,19 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBase_1 = require("./LayerBase");
-var mapMove_1 = require("../olHelpers/mapMove");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var Vector_1 = require("ol/layer/Vector");
-var Vector_2 = require("ol/source/Vector");
-var Projection_1 = require("ol/proj/Projection");
-var nm = provide_1.default('layers');
+const LayerBase_1 = require("./LayerBase");
+const mapMove_1 = require("../olHelpers/mapMove");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const Vector_1 = require("ol/layer/Vector");
+const Vector_2 = require("ol/source/Vector");
+const Projection_1 = require("ol/proj/Projection");
+const nm = provide_1.default('layers');
 /**
  * The Vector layer base
  * @augments LayerBase
  * @abstract
  */
-var LayerBaseVector = /** @class */ (function (_super) {
-    __extends(LayerBaseVector, _super);
+class LayerBaseVector extends LayerBase_1.LayerBase {
     /**
      * The base vector layer
      * @param {string} url - pass an empty string to prevent default load and add from a json source
@@ -53,66 +39,64 @@ var LayerBaseVector = /** @class */ (function (_super) {
      * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
      *
      */
-    function LayerBaseVector(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
+    constructor(url, options = {}) {
+        super(url, options);
         options = options;
         //prevent regular load if no url has been provided
-        if (_this.url.trim() == '') {
-            _this._loaded = true;
+        if (this.url.trim() == '') {
+            this._loaded = true;
         }
-        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
-        if (_this.visible) {
-            _this._autoLoad = true;
+        this._style = typeof options.style == 'undefined' ? undefined : options.style;
+        if (this.visible) {
+            this._autoLoad = true;
         }
         else {
-            _this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
+            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
         }
-        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
+        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
+        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
         if (options.mapMoveObj) {
-            _this._mapMove = options.mapMoveObj;
+            this._mapMove = options.mapMoveObj;
         }
         else {
-            _this._mapMove = _this._onDemand ? mapMove_1.default : undefined;
+            this._mapMove = this._onDemand ? mapMove_1.default : undefined;
         }
-        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
+        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
             function () { return {}; };
-        if (_this._onDemand) {
-            _this._loaded = true;
-            _this._mapMoveParams = {};
-            _this._mapMove.checkInit();
-            _this._mapMove.addVectorLayer(_this);
+        if (this._onDemand) {
+            this._loaded = true;
+            this._mapMoveParams = {};
+            this._mapMove.checkInit();
+            this._mapMove.addVectorLayer(this);
         }
-        _this._source = new Vector_2.default();
-        _this._olLayer = new Vector_1.default({
-            source: _this._source,
-            visible: _this.visible,
-            style: _this.style,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution,
+        this._source = new Vector_2.default();
+        this._olLayer = new Vector_1.default({
+            source: this._source,
+            visible: this.visible,
+            style: this.style,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution,
             renderOrder: options.renderOrder
         });
-        _this.olLayer.setZIndex(_this._zIndex);
-        _this._projectionMap = null;
-        _this._projection4326 = new Projection_1.default({ code: "EPSG:4326" });
-        _this._olLayer.setOpacity(_this.opacity);
-        return _this;
+        this.olLayer.setZIndex(this._zIndex);
+        this._projectionMap = null;
+        this._projection4326 = new Projection_1.default({ code: "EPSG:4326" });
+        this._olLayer.setOpacity(this.opacity);
     }
     /**
      * dummy to be overridden
      * @param {object} featureCollection - geojson or esrijson object
      */
-    LayerBaseVector.prototype.addFeatures = function (featureCollection) {
+    addFeatures(featureCollection) {
         console.log('Layer vector base addFeatures is a placeholder and does nothing');
-    };
+    }
     /**
      * Before call to map move callback, can prevent call by returning false
      * @param {number} zoom - zoom level
      * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
      * @returns {boolean} if the call should proceed
      */
-    LayerBaseVector.prototype.mapMoveBefore = function (zoom, evtType) {
+    mapMoveBefore(zoom, evtType) {
         if (this.minZoom !== undefined) {
             if (zoom < this.minZoom) {
                 return false;
@@ -124,7 +108,7 @@ var LayerBaseVector = /** @class */ (function (_super) {
             }
         }
         return this.visible;
-    };
+    }
     /**
      * callback to generate the parameters passed in the get request
      * @param {object} extent - extent object
@@ -134,168 +118,123 @@ var LayerBaseVector = /** @class */ (function (_super) {
      * @param {number} extent.maxY - maxY
      * @param {number} zoomLevel - zoom level
      */
-    LayerBaseVector.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
+    mapMoveMakeGetParams(extent, zoomLevel) {
         this._mapMoveParams = {};
         $.extend(this._mapMoveParams, this.params);
         $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-    };
+    }
     /**
      * callback function on map move
      * @param {object} d - the json response
      */
-    LayerBaseVector.prototype.mapMoveCallback = function (d) {
+    mapMoveCallback(d) {
         if (this.source) {
             this._source.clear();
         }
-    };
+    }
     /**
      * clear features in the layer
      */
-    LayerBaseVector.prototype.clear = function () {
+    clear() {
         if (this._source) {
             this._source.clear();
         }
-    };
-    Object.defineProperty(LayerBaseVector.prototype, "onDemandDelay", {
-        /**
-         * get on demand delay in miliseconds
-         */
-        get: function () {
-            return this._onDemandDelay;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "autoLoad", {
-        /**
-         * get if the layer is autoloaded
-         */
-        get: function () {
-            return this._autoLoad;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "style", {
-        /**
-         * get the style definition
-         */
-        get: function () {
-            return this._style;
-        },
-        /**
-         * set the style
-         * @param style - the style or function
-         */
-        set: function (style) {
-            this._style = style;
-            this.olLayer.setStyle(this._style);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapCrs", {
-        /**
-         * get the map CRS if it is defined by the map move object
-         */
-        get: function () {
-            return this.mapProj == null ? null : this.mapProj.getCode();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapProj", {
-        get: function () {
-            if (this._projectionMap != null) {
-                return this._projectionMap;
-            }
-            if (this._mapMove) {
-                this._projectionMap = this._mapMove.map.getView().getProjection();
-                return this._projectionMap;
-            }
-            else {
-                return null;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMove", {
-        /**
-         * get the map move object
-         * @type {MapMoveCls|*}
-         */
-        get: function () {
-            return this._mapMove;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "mapMoveParams", {
-        /**
-         * map move params
-         * @type {object}
-         */
-        get: function () {
-            return this._mapMoveParams;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "visible", {
-        get: function () {
-            return this._visible;
-        },
-        /**
-         * Set the layer visibility
-         * @type {boolean}
-         * @override
-         */
-        set: function (visibility) {
-            _super.prototype.setVisible.call(this, visibility);
-            if (this._onDemand) {
-                this.mapMove.triggerLyrLoad(this);
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "source", {
-        /**
-         * get the layer vector source
-         * @override
-         */
-        get: function () {
-            return this.getSource();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "features", {
-        /**
-         * array of ol features
-         */
-        get: function () {
-            return this.source.getFeatures();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseVector.prototype, "olLayer", {
-        /**
-         *
-         */
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    LayerBaseVector.prototype.setZIndex = function (newZ) {
+    }
+    /**
+     * get on demand delay in miliseconds
+     */
+    get onDemandDelay() {
+        return this._onDemandDelay;
+    }
+    /**
+     * get if the layer is autoloaded
+     */
+    get autoLoad() {
+        return this._autoLoad;
+    }
+    /**
+     * get the style definition
+     */
+    get style() {
+        return this._style;
+    }
+    /**
+     * set the style
+     * @param style - the style or function
+     */
+    set style(style) {
+        this._style = style;
+        this.olLayer.setStyle(this._style);
+    }
+    /**
+     * get the map CRS if it is defined by the map move object
+     */
+    get mapCrs() {
+        return this.mapProj == null ? null : this.mapProj.getCode();
+    }
+    get mapProj() {
+        if (this._projectionMap != null) {
+            return this._projectionMap;
+        }
+        if (this._mapMove) {
+            this._projectionMap = this._mapMove.map.getView().getProjection();
+            return this._projectionMap;
+        }
+        else {
+            return null;
+        }
+    }
+    /**
+     * get the map move object
+     * @type {MapMoveCls|*}
+     */
+    get mapMove() {
+        return this._mapMove;
+    }
+    /**
+     * map move params
+     * @type {object}
+     */
+    get mapMoveParams() {
+        return this._mapMoveParams;
+    }
+    get visible() {
+        return this._visible;
+    }
+    /**
+     * Set the layer visibility
+     * @type {boolean}
+     * @override
+     */
+    set visible(visibility) {
+        super.setVisible(visibility);
+        if (this._onDemand) {
+            this.mapMove.triggerLyrLoad(this);
+        }
+    }
+    /**
+     * get the layer vector source
+     * @override
+     */
+    get source() {
+        return this.getSource();
+    }
+    /**
+     * array of ol features
+     */
+    get features() {
+        return this.source.getFeatures();
+    }
+    /**
+     *
+     */
+    get olLayer() {
+        return super.getOlLayer();
+    }
+    setZIndex(newZ) {
         this.olLayer.setZIndex(newZ);
-    };
-    return LayerBaseVector;
-}(LayerBase_1.LayerBase));
+    }
+}
 exports.LayerBaseVector = LayerBaseVector;
 nm.LayerBaseVector = LayerBaseVector;
 exports.default = LayerBaseVector;
diff --git a/dist/layers/LayerBaseVector.js.map b/dist/layers/LayerBaseVector.js.map
index 0eb34e5..18088ac 100644
--- a/dist/layers/LayerBaseVector.js.map
+++ b/dist/layers/LayerBaseVector.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBaseVector.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVector.ts"],"names":[],"mappings":"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","sourcesContent":["import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport Style from 'ol/style/Style';\r\nimport Feature from 'ol/Feature';\r\nimport Vector from 'ol/layer/Vector'\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Projection from 'ol/proj/Projection';\r\nimport {iStyleFunc} from \"../olHelpers/esriToOlStyle\";\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n    /**\r\n     *\r\n     * @param lyr\r\n     * @param extent\r\n     * @param zoomLevel\r\n     */\r\n    (lyr: LayerBaseVector, extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel?: number): any\r\n}\r\n\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n    autoLoad?: boolean;\r\n    style?: Style|Style[]|iStyleFunc;\r\n    onDemand?: boolean;\r\n    onDemandDelay?: number;\r\n    mapMoveMakeGetParams?: makeMapMoveParams;\r\n    mapMoveObj?: MapMoveCls;\r\n    renderOrder?: (a: Feature, b: Feature) => number;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n    _olLayer: Vector;\r\n    _source: VectorSource;\r\n    _style: Style|Array<Style>|iStyleFunc;\r\n    _autoLoad: boolean;\r\n    _onDemand: boolean;\r\n    _onDemandDelay: number;\r\n    _mapMoveMakeGetParams: makeMapMoveParams;\r\n    _mapMoveParams: any;\r\n    _mapMove: MapMoveCls;\r\n    _projectionMap: Projection;\r\n    _projection4326: Projection;\r\n\r\n\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorOptions = {}) {\r\n        super(url, options);\r\n\r\n        options = options as LayerBaseVectorOptions;\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj) {\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () {return {};};\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new VectorSource();\r\n\r\n\r\n        this._olLayer = new Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                renderOrder: options.renderOrder\r\n            }\r\n        );\r\n\r\n        this.olLayer.setZIndex(this._zIndex);\r\n\r\n        this._projectionMap = null;\r\n        this._projection4326 = new Projection({code: \"EPSG:4326\"});\r\n        this._olLayer.setOpacity(this.opacity)\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection: Object) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom: number, evtType: string) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel: number) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     */\r\n    get onDemandDelay(): number {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     */\r\n    get autoLoad(): boolean {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     */\r\n    get style(): Array<Style>|Style|iStyleFunc {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param style - the style or function\r\n     */\r\n    set style(style: Style[]|Style|iStyleFunc) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style as Style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     */\r\n    get mapCrs(): string {\r\n        return this.mapProj == null ? null : this.mapProj.getCode();\r\n    }\r\n\r\n    get mapProj(): Projection{\r\n        if (this._projectionMap != null){\r\n            return this._projectionMap;\r\n        }\r\n\r\n        if (this._mapMove) {\r\n            this._projectionMap = this._mapMove.map.getView().getProjection();\r\n            return this._projectionMap;\r\n        } else {\r\n            return null;\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove(): MapMoveCls {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n    get visible(): boolean{\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.setVisible(visibility);\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     */\r\n    get source(): VectorSource {\r\n        return this.getSource() as VectorSource;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     */\r\n    get features(): Array<Feature> {\r\n        return this.source.getFeatures();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    get olLayer(): Vector {\r\n        return super.getOlLayer() as Vector;\r\n    }\r\n\r\n    protected setZIndex(newZ: number) {\r\n        this.olLayer.setZIndex(newZ);\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerBaseVector.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVector.ts"],"names":[],"mappings":"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","sourcesContent":["import {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport MapMoveCls from '../olHelpers/mapMoveCls'\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport Style from 'ol/style/Style';\r\nimport Feature from 'ol/Feature';\r\nimport Vector from 'ol/layer/Vector'\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Projection from 'ol/proj/Projection';\r\nimport {iStyleFunc} from \"../olHelpers/esriToOlStyle\";\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface makeMapMoveParams {\r\n    /**\r\n     *\r\n     * @param lyr\r\n     * @param extent\r\n     * @param zoomLevel\r\n     */\r\n    (lyr: LayerBaseVector, extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel?: number): any\r\n}\r\n\r\n\r\n\r\nexport interface LayerBaseVectorOptions extends LayerBaseOptions{\r\n    autoLoad?: boolean;\r\n    style?: Style|Style[]|iStyleFunc;\r\n    onDemand?: boolean;\r\n    onDemandDelay?: number;\r\n    mapMoveMakeGetParams?: makeMapMoveParams;\r\n    mapMoveObj?: MapMoveCls;\r\n    renderOrder?: (a: Feature, b: Feature) => number;\r\n\r\n}\r\n\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nexport class LayerBaseVector extends LayerBase {\r\n    _olLayer: Vector;\r\n    _source: VectorSource;\r\n    _style: Style|Array<Style>|iStyleFunc;\r\n    _autoLoad: boolean;\r\n    _onDemand: boolean;\r\n    _onDemandDelay: number;\r\n    _mapMoveMakeGetParams: makeMapMoveParams;\r\n    _mapMoveParams: any;\r\n    _mapMove: MapMoveCls;\r\n    _projectionMap: Projection;\r\n    _projection4326: Projection;\r\n\r\n\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorOptions = {}) {\r\n        super(url, options);\r\n\r\n        options = options as LayerBaseVectorOptions;\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj) {\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function () {return {};};\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new VectorSource();\r\n\r\n\r\n        this._olLayer = new Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                renderOrder: options.renderOrder\r\n            }\r\n        );\r\n\r\n        this.olLayer.setZIndex(this._zIndex);\r\n\r\n        this._projectionMap = null;\r\n        this._projection4326 = new Projection({code: \"EPSG:4326\"});\r\n        this._olLayer.setOpacity(this.opacity)\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection: Object) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom: number, evtType: string) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel: number) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     */\r\n    get onDemandDelay(): number {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     */\r\n    get autoLoad(): boolean {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     */\r\n    get style(): Array<Style>|Style|iStyleFunc {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param style - the style or function\r\n     */\r\n    set style(style: Style[]|Style|iStyleFunc) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style as Style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     */\r\n    get mapCrs(): string {\r\n        return this.mapProj == null ? null : this.mapProj.getCode();\r\n    }\r\n\r\n    get mapProj(): Projection{\r\n        if (this._projectionMap != null){\r\n            return this._projectionMap;\r\n        }\r\n\r\n        if (this._mapMove) {\r\n            this._projectionMap = this._mapMove.map.getView().getProjection();\r\n            return this._projectionMap;\r\n        } else {\r\n            return null;\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove(): MapMoveCls {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n    get visible(): boolean{\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.setVisible(visibility);\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     */\r\n    get source(): VectorSource {\r\n        return this.getSource() as VectorSource;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     */\r\n    get features(): Array<Feature> {\r\n        return this.source.getFeatures();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    get olLayer(): Vector {\r\n        return super.getOlLayer() as Vector;\r\n    }\r\n\r\n    protected setZIndex(newZ: number) {\r\n        this.olLayer.setZIndex(newZ);\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n\r\n\r\n\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerBaseVectorEsri.js b/dist/layers/LayerBaseVectorEsri.js
index 0801008..ae51618 100644
--- a/dist/layers/LayerBaseVectorEsri.js
+++ b/dist/layers/LayerBaseVectorEsri.js
@@ -2,26 +2,13 @@
 /**
  * Created by gavorhes on 11/2/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVector_1 = require("./LayerBaseVector");
-var esriToOl = require("../olHelpers/esriToOlStyle");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var nm = provide_1.default('layers');
-var EsriJSON_1 = require("ol/format/EsriJSON");
+const LayerBaseVector_1 = require("./LayerBaseVector");
+const esriToOl = require("../olHelpers/esriToOlStyle");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+let nm = provide_1.default('layers');
+const EsriJSON_1 = require("ol/format/EsriJSON");
 /**
  * Helper to return the url to the service on the production server
  * @param {string} folder
@@ -30,15 +17,14 @@ var EsriJSON_1 = require("ol/format/EsriJSON");
  * @returns {string}
  */
 function makeServiceUrl(folder, service, layer) {
-    return "https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/" + folder + "/" + service + "/MapServer/" + layer;
+    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer/${layer}`;
 }
 exports.makeServiceUrl = makeServiceUrl;
 /**
  * Base layer for esri vector layers
  * @augments LayerBaseVector
  */
-var LayerBaseVectorEsri = /** @class */ (function (_super) {
-    __extends(LayerBaseVectorEsri, _super);
+class LayerBaseVectorEsri extends LayerBaseVector_1.LayerBaseVector {
     /**
      * The base vector layer
      * @param {string} url - url for source
@@ -70,8 +56,7 @@ var LayerBaseVectorEsri = /** @class */ (function (_super) {
      * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
      * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
      */
-    function LayerBaseVectorEsri(url, options) {
-        var _this = this;
+    constructor(url, options) {
         if (typeof options.params != 'object') {
             options.params = {};
         }
@@ -79,70 +64,67 @@ var LayerBaseVectorEsri = /** @class */ (function (_super) {
         options.params['outFields'] = options.outFields || '*';
         options.params['f'] = options.format || 'pjson';
         options.params['outSR'] = options.outSR || 3857;
-        _this = _super.call(this, url, options) || this;
-        _this._outSR = _this.params['outSR'];
-        _this._esriFormat = new EsriJSON_1.default();
-        if (_this._url[_this._url.length - 1] !== '/') {
-            _this._url += '/';
+        super(url, options);
+        this._outSR = this.params['outSR'];
+        this._esriFormat = new EsriJSON_1.default();
+        if (this._url[this._url.length - 1] !== '/') {
+            this._url += '/';
         }
-        _this._urlCopy = _this.url;
-        _this._url += 'query?callback=?';
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
+        this._urlCopy = this.url;
+        this._url += 'query?callback=?';
+        if (this.autoLoad || this.visible) {
+            this._load();
         }
-        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-        if (_this._useEsriStyle) {
-            _this.addLegendContent();
+        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
+        if (this._useEsriStyle) {
+            this.addLegendContent();
         }
-        return _this;
     }
     /**
      * add additional content to the legend
      * @param {string} [additionalContent=''] additional content to add to legend
      */
-    LayerBaseVectorEsri.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
+    addLegendContent(additionalContent) {
         if (!this._useEsriStyle) {
-            _super.prototype.addLegendContent.call(this, additionalContent);
+            super.addLegendContent(additionalContent);
         }
         else {
-            $.get(this._urlCopy + '?f=pjson&callback=?', {}, function (d) {
+            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {
                 if (d['subLayers'].length > 0) {
                     alert('should only use single feature layers, not groups');
                     return;
                 }
-                var newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
-                _this.style = newStyleAndLegend.style;
-                _super.prototype.addLegendContent.call(_this, newStyleAndLegend.legend);
+                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
+                this.style = newStyleAndLegend.style;
+                super.addLegendContent(newStyleAndLegend.legend);
             }, 'json');
         }
-    };
+    }
     /**
      * add feature collection
      * @param {object} featureCollection - features as esrijson
      */
-    LayerBaseVectorEsri.prototype.addFeatures = function (featureCollection) {
-        var feats = this._esriFormat.readFeatures(featureCollection);
+    addFeatures(featureCollection) {
+        let feats = this._esriFormat.readFeatures(featureCollection);
         this.source.addFeatures(feats);
-    };
+    }
     /**
      * trigger load features
      * @protected
      * @returns {boolean} if already loaded
      */
-    LayerBaseVectorEsri.prototype._load = function () {
-        var _this = this;
-        if (_super.prototype._load.call(this)) {
+    _load() {
+        if (super._load()) {
             return true;
         }
-        $.get(this._url, this.params, function (d) {
-            _this.addFeatures(d);
-            _this.loadCallback(_this);
-        }, 'json').fail(function () {
-            _this._loaded = false;
+        $.get(this._url, this.params, (d) => {
+            this.addFeatures(d);
+            this.loadCallback(this);
+        }, 'json').fail(() => {
+            this._loaded = false;
         });
         return false;
-    };
+    }
     /**
      * callback to generate the parameters passed in the get request
      * @param {object} extent - extent object
@@ -152,9 +134,9 @@ var LayerBaseVectorEsri = /** @class */ (function (_super) {
      * @param {number} extent.maxY - maxY
      * @param {number} zoomLevel - zoom level
      */
-    LayerBaseVectorEsri.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
-        this.mapMoveParams['geometry'] = extent.minX + "," + extent.minY + "," + extent.maxX + "," + extent.maxY;
+    mapMoveMakeGetParams(extent, zoomLevel) {
+        super.mapMoveMakeGetParams(extent, zoomLevel);
+        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;
         this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';
         this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
         this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
@@ -162,32 +144,31 @@ var LayerBaseVectorEsri = /** @class */ (function (_super) {
         if (this._outSR == 3857) {
             this.mapMoveParams['geometryPrecision'] = 1;
         }
-    };
+    }
     /**
      * Before call to map move callback, can prevent call by returning false
      * @param {number} zoom - zoom level
      * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
      * @returns {boolean} if the call should proceed
      */
-    LayerBaseVectorEsri.prototype.mapMoveBefore = function (zoom, evtType) {
-        return _super.prototype.mapMoveBefore.call(this, zoom, evtType);
+    mapMoveBefore(zoom, evtType) {
+        return super.mapMoveBefore(zoom, evtType);
         //if (super.mapMoveBefore(zoom, evtType)){
         //    //place holder for additional processing
         //    return true;
         //} else {
         //    return false;
         //}
-    };
+    }
     /**
      * callback function on map move
      * @param {object} d - the json response
      */
-    LayerBaseVectorEsri.prototype.mapMoveCallback = function (d) {
-        _super.prototype.mapMoveCallback.call(this, d);
+    mapMoveCallback(d) {
+        super.mapMoveCallback(d);
         this.source.addFeatures(this._esriFormat.readFeatures(d));
-    };
-    return LayerBaseVectorEsri;
-}(LayerBaseVector_1.LayerBaseVector));
+    }
+}
 exports.LayerBaseVectorEsri = LayerBaseVectorEsri;
 nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
 exports.default = LayerBaseVectorEsri;
diff --git a/dist/layers/LayerBaseVectorEsri.js.map b/dist/layers/LayerBaseVectorEsri.js.map
index 0f6d6ae..35db7ff 100644
--- a/dist/layers/LayerBaseVectorEsri.js.map
+++ b/dist/layers/LayerBaseVectorEsri.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBaseVectorEsri.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorEsri.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nlet nm = provide('layers');\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @param {number} layer\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string, layer: number): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer/${layer}`\r\n}\r\n\r\nexport interface LayerBaseVectorEsriOptions  extends LayerBaseVectorOptions{\r\n    format?: string;\r\n    outSR?: number;\r\n    where?: string;\r\n    outFields?: string;\r\n    useEsriStyle?: boolean;\r\n}\r\n\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorEsri extends LayerBaseVector {\r\n    _outSR: number;\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _urlCopy: string;\r\n    _useEsriStyle: boolean;\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} [options.where=1=1] the layer filter clause\r\n     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all\r\n     * @param {string} [options.format=pjson] the format the retrieve the data\r\n     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed\r\n     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorEsriOptions) {\r\n\r\n        if (typeof options.params != 'object') {\r\n            options.params = {};\r\n        }\r\n        options.params['where'] = options.where || '1=1';\r\n        options.params['outFields'] = options.outFields || '*';\r\n        options.params['f'] = options.format || 'pjson';\r\n        options.params['outSR'] = options.outSR || 3857;\r\n\r\n        super(url, options);\r\n        this._outSR = this.params['outSR'];\r\n        this._esriFormat = new EsriJSON();\r\n\r\n        if (this._url[this._url.length - 1] !== '/') {\r\n            this._url += '/';\r\n        }\r\n\r\n        this._urlCopy = this.url;\r\n        this._url += 'query?callback=?';\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content to add to legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n\r\n                    return;\r\n                }\r\n\r\n                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                this.style = newStyleAndLegend.style;\r\n                super.addLegendContent(newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    addFeatures(featureCollection: Object) {\r\n        let feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, (d) => {\r\n            this.addFeatures(d);\r\n            this.loadCallback(this);\r\n        }, 'json').fail(() => {\r\n                this._loaded = false;\r\n            });\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel: number) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;\r\n        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['inSR'] = 3857;\r\n        if (this._outSR == 3857) {\r\n            this.mapMoveParams['geometryPrecision'] = 1;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom: number, evtType: string) {\r\n        return super.mapMoveBefore(zoom, evtType);\r\n        //if (super.mapMoveBefore(zoom, evtType)){\r\n        //    //place holder for additional processing\r\n        //    return true;\r\n        //} else {\r\n        //    return false;\r\n        //}\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        super.mapMoveCallback(d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexport default LayerBaseVectorEsri;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerBaseVectorEsri.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorEsri.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nlet nm = provide('layers');\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @param {number} layer\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string, layer: number): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer/${layer}`\r\n}\r\n\r\nexport interface LayerBaseVectorEsriOptions  extends LayerBaseVectorOptions{\r\n    format?: string;\r\n    outSR?: number;\r\n    where?: string;\r\n    outFields?: string;\r\n    useEsriStyle?: boolean;\r\n}\r\n\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorEsri extends LayerBaseVector {\r\n    _outSR: number;\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _urlCopy: string;\r\n    _useEsriStyle: boolean;\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} [options.where=1=1] the layer filter clause\r\n     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all\r\n     * @param {string} [options.format=pjson] the format the retrieve the data\r\n     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed\r\n     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params\r\n     */\r\n    constructor(url: string, options: LayerBaseVectorEsriOptions) {\r\n\r\n        if (typeof options.params != 'object') {\r\n            options.params = {};\r\n        }\r\n        options.params['where'] = options.where || '1=1';\r\n        options.params['outFields'] = options.outFields || '*';\r\n        options.params['f'] = options.format || 'pjson';\r\n        options.params['outSR'] = options.outSR || 3857;\r\n\r\n        super(url, options);\r\n        this._outSR = this.params['outSR'];\r\n        this._esriFormat = new EsriJSON();\r\n\r\n        if (this._url[this._url.length - 1] !== '/') {\r\n            this._url += '/';\r\n        }\r\n\r\n        this._urlCopy = this.url;\r\n        this._url += 'query?callback=?';\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content to add to legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n\r\n                    return;\r\n                }\r\n\r\n                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                this.style = newStyleAndLegend.style;\r\n                super.addLegendContent(newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    addFeatures(featureCollection: Object) {\r\n        let feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, (d) => {\r\n            this.addFeatures(d);\r\n            this.loadCallback(this);\r\n        }, 'json').fail(() => {\r\n                this._loaded = false;\r\n            });\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: {minX: number, minY: number, maxX: number, maxY: number}, zoomLevel: number) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;\r\n        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['inSR'] = 3857;\r\n        if (this._outSR == 3857) {\r\n            this.mapMoveParams['geometryPrecision'] = 1;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom: number, evtType: string) {\r\n        return super.mapMoveBefore(zoom, evtType);\r\n        //if (super.mapMoveBefore(zoom, evtType)){\r\n        //    //place holder for additional processing\r\n        //    return true;\r\n        //} else {\r\n        //    return false;\r\n        //}\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        super.mapMoveCallback(d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexport default LayerBaseVectorEsri;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerBaseVectorGeoJson.js b/dist/layers/LayerBaseVectorGeoJson.js
index 57e8e98..56bb906 100644
--- a/dist/layers/LayerBaseVectorGeoJson.js
+++ b/dist/layers/LayerBaseVectorGeoJson.js
@@ -2,33 +2,19 @@
 /**
  * Created by gavorhes on 11/2/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVector_1 = require("./LayerBaseVector");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var proj = require("../olHelpers/projections");
-var projections_1 = require("../olHelpers/projections");
-var GeoJSON_1 = require("ol/format/GeoJSON");
-var nm = provide_1.default('layers');
+const LayerBaseVector_1 = require("./LayerBaseVector");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const proj = require("../olHelpers/projections");
+const projections_1 = require("../olHelpers/projections");
+const GeoJSON_1 = require("ol/format/GeoJSON");
+let nm = provide_1.default('layers');
 /**
  * The Vector GeoJson Layer
  * @augments LayerBaseVector
  */
-var LayerBaseVectorGeoJson = /** @class */ (function (_super) {
-    __extends(LayerBaseVectorGeoJson, _super);
+class LayerBaseVectorGeoJson extends LayerBaseVector_1.LayerBaseVector {
     /**
      * @param {string|null} url - resource url, set to '' to make blank layer
      * @param {object} options - config
@@ -56,57 +42,52 @@ var LayerBaseVectorGeoJson = /** @class */ (function (_super) {
      * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
      * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
      */
-    function LayerBaseVectorGeoJson(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = this;
+    constructor(url, options = {}) {
         url = typeof url == 'string' ? url : '';
-        _this = _super.call(this, url, options) || this;
-        _this._geoJsonFormat = new GeoJSON_1.default();
-        _this._transform = options.transform || {};
-        _this._transform.dataProjection = _this._transform.dataProjection || proj.proj4326;
-        _this._transform.featureProjection = _this._transform.featureProjection || projections_1.proj3857;
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
+        super(url, options);
+        this._geoJsonFormat = new GeoJSON_1.default();
+        this._transform = options.transform || {};
+        this._transform.dataProjection = this._transform.dataProjection || proj.proj4326;
+        this._transform.featureProjection = this._transform.featureProjection || projections_1.proj3857;
+        if (this.autoLoad || this.visible) {
+            this._load();
         }
-        return _this;
     }
     /**
      * add feature collection
      * @param {object} featureCollection - as geojson object
      */
-    LayerBaseVectorGeoJson.prototype.addFeatures = function (featureCollection) {
+    addFeatures(featureCollection) {
         this.source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, { dataProjection: this._transform.dataProjection,
             featureProjection: this._transform.featureProjection }));
-    };
+    }
     /**
      * trigger load features
      * @protected
      * @returns {boolean} if already loaded
      */
-    LayerBaseVectorGeoJson.prototype._load = function () {
-        var _this = this;
-        if (_super.prototype._load.call(this)) {
+    _load() {
+        if (super._load()) {
             return true;
         }
-        $.get(this._url, this._params, function (d) {
-            _this.addFeatures(d);
-            _this.loadCallback(_this);
+        $.get(this._url, this._params, (d) => {
+            this.addFeatures(d);
+            this.loadCallback(this);
         }, 'json').fail(function () {
             this._loaded = false;
         });
         return false;
-    };
+    }
     /**
      * callback function on map move
      * @param {object} d the json response
      * @override
      */
-    LayerBaseVectorGeoJson.prototype.mapMoveCallback = function (d) {
-        _super.prototype.mapMoveCallback.call(this, d);
+    mapMoveCallback(d) {
+        super.mapMoveCallback(d);
         this._source.addFeatures(this._geoJsonFormat.readFeatures(d, { featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection }));
-    };
-    return LayerBaseVectorGeoJson;
-}(LayerBaseVector_1.LayerBaseVector));
+    }
+}
 exports.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
 nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
 exports.default = LayerBaseVectorGeoJson;
diff --git a/dist/layers/LayerBaseVectorGeoJson.js.map b/dist/layers/LayerBaseVectorGeoJson.js.map
index 1bcb4ea..472400d 100644
--- a/dist/layers/LayerBaseVectorGeoJson.js.map
+++ b/dist/layers/LayerBaseVectorGeoJson.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBaseVectorGeoJson.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorGeoJson.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAEH,qDAA0E;AAC1E,2CAAsC;AACtC,0BAA6B;AAE7B,+CAAiD;AACjD,wDAAkD;AAElD,6CAAuC;AAEvC,IAAI,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAa3B;;;GAGG;AACH;IAA4C,0CAAe;IAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,gCAAY,GAAY,EAAE,OAA2C;QAA3C,wBAAA,EAAA,YAA2C;QAArE,iBAaC;QAZG,GAAG,GAAG,OAAO,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,QAAA,kBAAM,GAAG,EAAE,OAAO,CAAC,SAAC;QAEpB,KAAI,CAAC,cAAc,GAAG,IAAI,iBAAO,EAAE,CAAC;QAEpC,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC1C,KAAI,CAAC,UAAU,CAAC,cAAc,GAAG,KAAI,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;QACjF,KAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,KAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,sBAAQ,CAAC;QAElF,IAAI,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,OAAO,EAAE;YAC/B,KAAI,CAAC,KAAK,EAAE,CAAC;SAChB;;IACL,CAAC;IAED;;;OAGG;IACH,4CAAW,GAAX,UAAY,iBAAsB;QAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CACnB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAC9C,EAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc;YAC3C,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAC,CACxD,CACR,CAAC;IACN,CAAC;IAGD;;;;OAIG;IACH,sCAAK,GAAL;QAAA,iBAkBC;QAhBG,IAAI,iBAAM,KAAK,WAAE,EAAE;YACf,OAAO,IAAI,CAAC;SACf;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,OAAO,EACZ,UAAC,CAAC;YACE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CACf;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC,CACJ,CAAC;QAEF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,gDAAe,GAAf,UAAgB,CAAS;QACrB,iBAAM,eAAe,YAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EACvD,EAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAC,CAAC,CAAC,CAAC;IACjH,CAAC;IACL,6BAAC;AAAD,CAAC,AA/FD,CAA4C,iCAAe,GA+F1D;AA/FY,wDAAsB;AAiGnC,EAAE,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACnD,kBAAe,sBAAsB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nimport * as proj from '../olHelpers/projections';\r\nimport {proj3857} from \"../olHelpers/projections\";\r\nimport Projection from 'ol/proj/Projection';\r\nimport GeoJSON from 'ol/format/GeoJSON'\r\n\r\nlet nm = provide('layers');\r\n\r\nexport interface crsTransform {\r\n    dataProjection?: Projection;\r\n    featureProjection?: Projection;\r\n}\r\n\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions {\r\n    transform?: crsTransform;\r\n    mapMoveObj?: MapMoveCls;\r\n}\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorGeoJson extends LayerBaseVector {\r\n    _geoJsonFormat: GeoJSON;\r\n    _transform: crsTransform;\r\n\r\n    /**\r\n     * @param {string|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url?: string, options: LayerBaseVectorGeoJsonOptions = {}) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || proj.proj4326;\r\n        this._transform.featureProjection = this._transform.featureProjection || proj3857;\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection: any) {\r\n        this.source.addFeatures(\r\n            this._geoJsonFormat.readFeatures(featureCollection,\r\n                {dataProjection: this._transform.dataProjection,\r\n                    featureProjection: this._transform.featureProjection}\r\n                )\r\n        );\r\n    }\r\n\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d,\r\n            {featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection}));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerBaseVectorGeoJson.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorGeoJson.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uDAA0E;AAC1E,6CAAsC;AACtC,4BAA6B;AAE7B,iDAAiD;AACjD,0DAAkD;AAElD,+CAAuC;AAEvC,IAAI,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAa3B;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,iCAAe;IAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,YAAY,GAAY,EAAE,UAAyC,EAAE;QACjE,GAAG,GAAG,OAAO,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAO,EAAE,CAAC;QAEpC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;QACjF,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,sBAAQ,CAAC;QAElF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;IACL,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,iBAAsB;QAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CACnB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAC9C,EAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc;YAC3C,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAC,CACxD,CACR,CAAC;IACN,CAAC;IAGD;;;;OAIG;IACH,KAAK;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE;YACf,OAAO,IAAI,CAAC;SACf;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,OAAO,EACZ,CAAC,CAAC,EAAE,EAAE;YACF,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CACf;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC,CACJ,CAAC;QAEF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAS;QACrB,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EACvD,EAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAC,CAAC,CAAC,CAAC;IACjH,CAAC;CACJ;AA/FD,wDA+FC;AAED,EAAE,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACnD,kBAAe,sBAAsB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {MapMoveCls} from \"../olHelpers/mapMoveCls\";\r\nimport * as proj from '../olHelpers/projections';\r\nimport {proj3857} from \"../olHelpers/projections\";\r\nimport Projection from 'ol/proj/Projection';\r\nimport GeoJSON from 'ol/format/GeoJSON'\r\n\r\nlet nm = provide('layers');\r\n\r\nexport interface crsTransform {\r\n    dataProjection?: Projection;\r\n    featureProjection?: Projection;\r\n}\r\n\r\n\r\nexport interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions {\r\n    transform?: crsTransform;\r\n    mapMoveObj?: MapMoveCls;\r\n}\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nexport class LayerBaseVectorGeoJson extends LayerBaseVector {\r\n    _geoJsonFormat: GeoJSON;\r\n    _transform: crsTransform;\r\n\r\n    /**\r\n     * @param {string|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url?: string, options: LayerBaseVectorGeoJsonOptions = {}) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || proj.proj4326;\r\n        this._transform.featureProjection = this._transform.featureProjection || proj3857;\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection: any) {\r\n        this.source.addFeatures(\r\n            this._geoJsonFormat.readFeatures(featureCollection,\r\n                {dataProjection: this._transform.dataProjection,\r\n                    featureProjection: this._transform.featureProjection}\r\n                )\r\n        );\r\n    }\r\n\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d: Object) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d,\r\n            {featureProjection: this._transform.featureProjection, dataProjection: this._transform.dataProjection}));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerBaseXyzTile.js b/dist/layers/LayerBaseXyzTile.js
index 9aa855c..4c5951b 100644
--- a/dist/layers/LayerBaseXyzTile.js
+++ b/dist/layers/LayerBaseXyzTile.js
@@ -1,32 +1,18 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/4/2015.
  */
-var LayerBase_1 = require("./LayerBase");
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('layers');
-var XYZ_1 = require("ol/source/XYZ");
-var Tile_1 = require("ol/layer/Tile");
+const LayerBase_1 = require("./LayerBase");
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('layers');
+const XYZ_1 = require("ol/source/XYZ");
+const Tile_1 = require("ol/layer/Tile");
 /**
  * XYZ tile
  * @augments LayerBase
  */
-var LayerBaseXyzTile = /** @class */ (function (_super) {
-    __extends(LayerBaseXyzTile, _super);
+class LayerBaseXyzTile extends LayerBase_1.LayerBase {
     /**
      * The XYZ tile layer
      * @param {string} url - url for source
@@ -45,36 +31,25 @@ var LayerBaseXyzTile = /** @class */ (function (_super) {
      * @param {boolean} [options.legendContent] additional content to add to the legend
      * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
      */
-    function LayerBaseXyzTile(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new XYZ_1.default({ url: _this.url == '' ? undefined : _this.url });
-        _this._olLayer = new Tile_1.default({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
+    constructor(url, options = {}) {
+        super(url, options);
+        this._source = new XYZ_1.default({ url: this.url == '' ? undefined : this.url });
+        this._olLayer = new Tile_1.default({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution
         });
-        _this._olLayer.setZIndex(_this._zIndex);
-        return _this;
+        this._olLayer.setZIndex(this._zIndex);
     }
-    Object.defineProperty(LayerBaseXyzTile.prototype, "source", {
-        get: function () {
-            return this._source;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerBaseXyzTile.prototype, "olLayer", {
-        get: function () {
-            return this._olLayer;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerBaseXyzTile;
-}(LayerBase_1.LayerBase));
+    get source() {
+        return this._source;
+    }
+    get olLayer() {
+        return this._olLayer;
+    }
+}
 exports.LayerBaseXyzTile = LayerBaseXyzTile;
 nm.LayerBaseXyzTile = LayerBaseXyzTile;
 exports.default = LayerBaseXyzTile;
diff --git a/dist/layers/LayerBaseXyzTile.js.map b/dist/layers/LayerBaseXyzTile.js.map
index 9e8be11..4489f86 100644
--- a/dist/layers/LayerBaseXyzTile.js.map
+++ b/dist/layers/LayerBaseXyzTile.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBaseXyzTile.js","sourceRoot":"","sources":["../../src/layers/LayerBaseXyzTile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;GAEG;AACH,yCAAwD;AACxD,2CAAsC;AACtC,IAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAC7B,qCAAgC;AAChC,sCAAiC;AAGjC;;;GAGG;AACH;IAAsC,oCAAS;IAG3C;;;;;;;;;;;;;;;;;OAiBG;IACH,0BAAY,GAAW,EAAE,OAA8B;QAA9B,wBAAA,EAAA,YAA8B;QAAvD,YACI,kBAAM,GAAG,EAAE,OAAO,CAAC,SAYtB;QAXG,KAAI,CAAC,OAAO,GAAG,IAAI,aAAG,CAAC,EAAC,GAAG,EAAE,KAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI,CAAC,GAAG,EAAC,CAAC,CAAC;QAErE,KAAI,CAAC,QAAQ,GAAG,IAAI,cAAI,CAAC;YACrB,MAAM,EAAE,KAAI,CAAC,OAAc;YAC3B,OAAO,EAAE,KAAI,CAAC,OAAO;YACrB,OAAO,EAAE,KAAI,CAAC,OAAO;YACrB,aAAa,EAAE,KAAI,CAAC,cAAc;YAClC,aAAa,EAAE,KAAI,CAAC,cAAc;SACrC,CAAE,CAAC;QAEJ,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;;IAC1C,CAAC;IAGD,sBAAI,oCAAM;aAAV;YACI,OAAO,IAAI,CAAC,OAAc,CAAC;QAC/B,CAAC;;;OAAA;IAGD,sBAAI,qCAAO;aAAX;YACI,OAAO,IAAI,CAAC,QAAgB,CAAC;QACjC,CAAC;;;OAAA;IACL,uBAAC;AAAD,CAAC,AA7CD,CAAsC,qBAAS,GA6C9C;AA7CY,4CAAgB;AA+C7B,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACvC,kBAAe,gBAAgB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport provide from '../util/provide';\r\nconst nm = provide('layers');\r\nimport XYZ from 'ol/source/XYZ';\r\nimport Tile from 'ol/layer/Tile';\r\n\r\n\r\n/**\r\n * XYZ tile\r\n * @augments LayerBase\r\n */\r\nexport class LayerBaseXyzTile extends LayerBase {\r\n\r\n\r\n    /**\r\n     * The XYZ tile layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        super(url, options);\r\n        this._source = new XYZ({url: this.url == '' ? undefined : this.url});\r\n\r\n        this._olLayer = new Tile({\r\n            source: this._source as XYZ,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        } );\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n    }\r\n\r\n\r\n    get source(): XYZ {\r\n        return this._source as XYZ;\r\n    }\r\n\r\n\r\n    get olLayer() : Tile {\r\n        return this._olLayer as Tile;\r\n    }\r\n}\r\n\r\nnm.LayerBaseXyzTile = LayerBaseXyzTile;\r\nexport default LayerBaseXyzTile;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerBaseXyzTile.js","sourceRoot":"","sources":["../../src/layers/LayerBaseXyzTile.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,2CAAwD;AACxD,6CAAsC;AACtC,MAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAC7B,uCAAgC;AAChC,wCAAiC;AAGjC;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,qBAAS;IAG3C;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,GAAW,EAAE,UAA4B,EAAE;QACnD,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,aAAG,CAAC,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC;QAErE,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAI,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,OAAc;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,aAAa,EAAE,IAAI,CAAC,cAAc;SACrC,CAAE,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAGD,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAc,CAAC;IAC/B,CAAC;IAGD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAgB,CAAC;IACjC,CAAC;CACJ;AA7CD,4CA6CC;AAED,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACvC,kBAAe,gBAAgB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport provide from '../util/provide';\r\nconst nm = provide('layers');\r\nimport XYZ from 'ol/source/XYZ';\r\nimport Tile from 'ol/layer/Tile';\r\n\r\n\r\n/**\r\n * XYZ tile\r\n * @augments LayerBase\r\n */\r\nexport class LayerBaseXyzTile extends LayerBase {\r\n\r\n\r\n    /**\r\n     * The XYZ tile layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     */\r\n    constructor(url: string, options: LayerBaseOptions = {}) {\r\n        super(url, options);\r\n        this._source = new XYZ({url: this.url == '' ? undefined : this.url});\r\n\r\n        this._olLayer = new Tile({\r\n            source: this._source as XYZ,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        } );\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n    }\r\n\r\n\r\n    get source(): XYZ {\r\n        return this._source as XYZ;\r\n    }\r\n\r\n\r\n    get olLayer() : Tile {\r\n        return this._olLayer as Tile;\r\n    }\r\n}\r\n\r\nnm.LayerBaseXyzTile = LayerBaseXyzTile;\r\nexport default LayerBaseXyzTile;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerEsriMapServer.js b/dist/layers/LayerEsriMapServer.js
index 6c30390..b54ffcd 100644
--- a/dist/layers/LayerEsriMapServer.js
+++ b/dist/layers/LayerEsriMapServer.js
@@ -1,30 +1,17 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/7/2015.
  */
-var LayerBase_1 = require("./LayerBase");
-var esriToOl = require("../olHelpers/esriToOlStyle");
-var mapPopup_1 = require("../olHelpers/mapPopup");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var EsriJSON_1 = require("ol/format/EsriJSON");
-var TileArcGISRest_1 = require("ol/source/TileArcGISRest");
-var Tile_1 = require("ol/layer/Tile");
-var nm = provide_1.default('layers');
+const LayerBase_1 = require("./LayerBase");
+const esriToOl = require("../olHelpers/esriToOlStyle");
+const mapPopup_1 = require("../olHelpers/mapPopup");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const EsriJSON_1 = require("ol/format/EsriJSON");
+const TileArcGISRest_1 = require("ol/source/TileArcGISRest");
+const Tile_1 = require("ol/layer/Tile");
+const nm = provide_1.default('layers');
 /**
  * Helper to return the url to the service on the production server
  * @param {string} folder
@@ -32,13 +19,13 @@ var nm = provide_1.default('layers');
  * @returns {string}
  */
 function makeServiceUrl(folder, service) {
-    return "https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/" + folder + "/" + service + "/MapServer";
+    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer`;
 }
 exports.makeServiceUrl = makeServiceUrl;
 function localCacheUrl(folder, service) {
-    var windowLocation = window.location;
-    var loc = windowLocation.href;
-    var url = "/mapserver/" + folder + "/" + service;
+    let windowLocation = window.location;
+    let loc = windowLocation.href;
+    let url = `/mapserver/${folder}/${service}`;
     if (loc.indexOf('transportal.cee.wisc.edu') > -1) {
         if (loc.toLowerCase().indexOf('webmapsstage') > -1) {
             url = 'https://transportal.cee.wisc.edu/gis/webmapsstage' + url;
@@ -57,8 +44,7 @@ exports.localCacheUrl = localCacheUrl;
  * esri mapserver layer
  * @augments LayerBase
  */
-var LayerEsriMapServer = /** @class */ (function (_super) {
-    __extends(LayerEsriMapServer, _super);
+class LayerEsriMapServer extends LayerBase_1.LayerBase {
     /**
      * The base layer for all others
      * @param {string} url - resource url
@@ -78,78 +64,74 @@ var LayerEsriMapServer = /** @class */ (function (_super) {
      * @param {boolean} [options.addPopup=false] if a popup should be added
      * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
      */
-    function LayerEsriMapServer(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = _super.call(this, url, options) || this;
-        _this._source = new TileArcGISRest_1.default({
-            url: _this.url == '' ? undefined : _this.url,
+    constructor(url, options = {}) {
+        super(url, options);
+        this._source = new TileArcGISRest_1.default({
+            url: this.url == '' ? undefined : this.url,
             params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
         });
-        _this._showLayers = options.showLayers || [];
-        _this._olLayer = new Tile_1.default({
-            source: _this._source,
-            visible: _this.visible,
-            opacity: _this.opacity,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution
+        this._showLayers = options.showLayers || [];
+        this._olLayer = new Tile_1.default({
+            source: this._source,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution
         });
-        _this._olLayer.setZIndex(_this._zIndex);
+        this._olLayer.setZIndex(this._zIndex);
         options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-        _this._esriFormat = new EsriJSON_1.default();
-        _this._popupRequest = null;
+        this._esriFormat = new EsriJSON_1.default();
+        this._popupRequest = null;
         options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;
         if (options.getLegend) {
-            _this.addLegendContent();
+            this.addLegendContent();
         }
         if (options.addPopup) {
-            mapPopup_1.default.addMapServicePopup(_this);
+            mapPopup_1.default.addMapServicePopup(this);
         }
-        return _this;
     }
     /**
      * add additional content to the legend
      * @param {string} [additionalContent=''] additional content for legend
      */
-    LayerEsriMapServer.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        var urlCopy = this.url;
+    addLegendContent(additionalContent) {
+        let urlCopy = this.url;
         if (urlCopy[urlCopy.length - 1] !== '/') {
             urlCopy += '/';
         }
         urlCopy += 'legend?f=pjson&callback=?';
-        $.get(urlCopy, {}, function (d) {
-            var newHtml = esriToOl.makeMapServiceLegend(d, _this._showLayers);
-            _super.prototype.addLegendContent.call(_this, newHtml);
+        $.get(urlCopy, {}, (d) => {
+            let newHtml = esriToOl.makeMapServiceLegend(d, this._showLayers);
+            super.addLegendContent(newHtml);
         }, 'json');
-    };
-    LayerEsriMapServer.prototype.getPopupInfo = function (queryParams) {
+    }
+    getPopupInfo(queryParams) {
         if (!this.visible) {
             return;
         }
-        var urlCopy = this.url;
+        let urlCopy = this.url;
         if (urlCopy[urlCopy.length - 1] != '/') {
             urlCopy += '/';
         }
         urlCopy += 'identify?callback=?';
-        var __this = this;
+        let __this = this;
         if (this._popupRequest != null) {
             this._popupRequest.abort();
         }
         this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (var _i = 0, _a = d['results']; _i < _a.length; _i++) {
-                var r = _a[_i];
-                var popupHtml = '<table class="esri-popup-table">';
-                for (var a in r['attributes']) {
+            for (let r of d['results']) {
+                let popupHtml = '<table class="esri-popup-table">';
+                for (let a in r['attributes']) {
                     if (r['attributes'].hasOwnProperty(a)) {
-                        var attrVal = r['attributes'][a];
+                        let attrVal = r['attributes'][a];
                         if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
                             continue;
                         }
-                        var attr = a;
+                        let attr = a;
                         if (attr.length > 14) {
                             attr = attr.slice(0, 11) + '...';
                         }
-                        popupHtml += "<tr><td>" + attr + "</td><td>" + attrVal + "</td></tr>";
+                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;
                     }
                 }
                 popupHtml += '</table>';
@@ -159,23 +141,14 @@ var LayerEsriMapServer = /** @class */ (function (_super) {
         this._popupRequest.always(function () {
             __this._popupRequest = null;
         });
-    };
-    Object.defineProperty(LayerEsriMapServer.prototype, "source", {
-        get: function () {
-            return _super.prototype.getSource.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(LayerEsriMapServer.prototype, "olLayer", {
-        get: function () {
-            return _super.prototype.getOlLayer.call(this);
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerEsriMapServer;
-}(LayerBase_1.LayerBase));
+    }
+    get source() {
+        return super.getSource();
+    }
+    get olLayer() {
+        return super.getOlLayer();
+    }
+}
 exports.LayerEsriMapServer = LayerEsriMapServer;
 nm.LayerEsriMapServer = LayerEsriMapServer;
 exports.default = LayerEsriMapServer;
diff --git a/dist/layers/LayerEsriMapServer.js.map b/dist/layers/LayerEsriMapServer.js.map
index 0484366..445d0db 100644
--- a/dist/layers/LayerEsriMapServer.js.map
+++ b/dist/layers/LayerEsriMapServer.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../src/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\nimport TileArcGISRestSource from 'ol/source/TileArcGISRest'\r\nimport TileLayer from 'ol/layer/Tile';\r\nimport TileSource from 'ol/source/Tile';\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer`\r\n}\r\n\r\nexport function localCacheUrl(folder: string, service: string): string{\r\n    let windowLocation = window.location;\r\n    let loc = windowLocation.href;\r\n\r\n    let url = `/mapserver/${folder}/${service}`;\r\n\r\n    if (loc.indexOf('transportal.cee.wisc.edu') > -1){\r\n        if (loc.toLowerCase().indexOf('webmapsstage') > -1){\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmapsstage' + url;\r\n        } else {\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n        }\r\n    } else if (parseInt(windowLocation.port) !== 8081){\r\n        url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n    }\r\n\r\n\r\n    return url;\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n    getLegend?: boolean;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n    _showLayers: number[];\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url: string, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new TileArcGISRestSource(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._showLayers = options.showLayers || [];\r\n\r\n        this._olLayer = new TileLayer({\r\n            source: this._source as TileSource,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;\r\n\r\n        if (options.getLegend){\r\n            this.addLegendContent();\r\n        }\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d, this._showLayers);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams: {[s: string]: any}) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n\r\n    get source(): TileArcGISRestSource {\r\n        return super.getSource() as TileArcGISRestSource;\r\n    }\r\n\r\n\r\n    get olLayer(): TileLayer {\r\n        return super.getOlLayer() as TileLayer;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../src/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport EsriJSON from 'ol/format/EsriJSON';\r\nimport TileArcGISRestSource from 'ol/source/TileArcGISRest'\r\nimport TileLayer from 'ol/layer/Tile';\r\nimport TileSource from 'ol/source/Tile';\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer`\r\n}\r\n\r\nexport function localCacheUrl(folder: string, service: string): string{\r\n    let windowLocation = window.location;\r\n    let loc = windowLocation.href;\r\n\r\n    let url = `/mapserver/${folder}/${service}`;\r\n\r\n    if (loc.indexOf('transportal.cee.wisc.edu') > -1){\r\n        if (loc.toLowerCase().indexOf('webmapsstage') > -1){\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmapsstage' + url;\r\n        } else {\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n        }\r\n    } else if (parseInt(windowLocation.port) !== 8081){\r\n        url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n    }\r\n\r\n\r\n    return url;\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n    getLegend?: boolean;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n    _showLayers: number[];\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url: string, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new TileArcGISRestSource(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._showLayers = options.showLayers || [];\r\n\r\n        this._olLayer = new TileLayer({\r\n            source: this._source as TileSource,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;\r\n\r\n        if (options.getLegend){\r\n            this.addLegendContent();\r\n        }\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d, this._showLayers);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams: {[s: string]: any}) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n\r\n    get source(): TileArcGISRestSource {\r\n        return super.getSource() as TileArcGISRestSource;\r\n    }\r\n\r\n\r\n    get olLayer(): TileLayer {\r\n        return super.getOlLayer() as TileLayer;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerEsriTile.js b/dist/layers/LayerEsriTile.js
index 71c67ee..0e87f02 100644
--- a/dist/layers/LayerEsriTile.js
+++ b/dist/layers/LayerEsriTile.js
@@ -1,31 +1,17 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/4/2015.
  */
-var provide_1 = require("../util/provide");
-var LayerBaseXyzTile_1 = require("./LayerBaseXyzTile");
-var esriToOl = require("../olHelpers/esriToOlStyle");
-var nm = provide_1.default('layers');
+const provide_1 = require("../util/provide");
+const LayerBaseXyzTile_1 = require("./LayerBaseXyzTile");
+const esriToOl = require("../olHelpers/esriToOlStyle");
+const nm = provide_1.default('layers');
 /**
  * Esri tile
  * @augments LayerBaseXyzTile
  */
-var LayerEsriTile = /** @class */ (function (_super) {
-    __extends(LayerEsriTile, _super);
+class LayerEsriTile extends LayerBaseXyzTile_1.LayerBaseXyzTile {
     /**
      * The Esri tile layer
      * @param {string} url - url for source
@@ -44,33 +30,28 @@ var LayerEsriTile = /** @class */ (function (_super) {
      * @param {boolean} [options.legendContent] additional content to add to the legend
      * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
      */
-    function LayerEsriTile(url, options) {
-        if (options === void 0) { options = {}; }
-        var _this = this;
+    constructor(url, options = {}) {
         if (url.search(/\/$/) == -1) {
             url += '/';
         }
         url += 'tile/{z}/{y}/{x}';
-        _this = _super.call(this, url, options) || this;
-        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-        if (_this._useEsriStyle) {
-            _this.addLegendContent();
+        super(url, options);
+        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
+        if (this._useEsriStyle) {
+            this.addLegendContent();
         }
-        return _this;
     }
     /**
      * add additional content to the legend
      * @param {string} [additionalContent=''] additional content for legend
      */
-    LayerEsriTile.prototype.addLegendContent = function (additionalContent) {
-        var _this = this;
-        if (additionalContent === void 0) { additionalContent = ''; }
+    addLegendContent(additionalContent = '') {
         if (!this._useEsriStyle) {
-            _super.prototype.addLegendContent.call(this, additionalContent);
+            super.addLegendContent(additionalContent);
         }
         else {
-            var urlCopy = this.url;
-            var mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
+            let urlCopy = this.url;
+            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
             if (mapServerIndex > -1) {
                 urlCopy = urlCopy.slice(0, mapServerIndex + 9);
             }
@@ -81,15 +62,14 @@ var LayerEsriTile = /** @class */ (function (_super) {
                 urlCopy += '/';
             }
             urlCopy += 'legend?f=pjson&callback=?';
-            var superAddLegend_1 = _super.prototype.addLegendContent;
-            $.get(urlCopy, {}, function (d) {
-                var newHtml = esriToOl.makeMapServiceLegend(d);
-                superAddLegend_1.call(_this, newHtml);
+            let superAddLegend = super.addLegendContent;
+            $.get(urlCopy, {}, (d) => {
+                let newHtml = esriToOl.makeMapServiceLegend(d);
+                superAddLegend.call(this, newHtml);
             }, 'json');
         }
-    };
-    return LayerEsriTile;
-}(LayerBaseXyzTile_1.LayerBaseXyzTile));
+    }
+}
 exports.LayerEsriTile = LayerEsriTile;
 nm.LayerBaseXyzTile = LayerEsriTile;
 exports.default = LayerEsriTile;
diff --git a/dist/layers/LayerEsriTile.js.map b/dist/layers/LayerEsriTile.js.map
index 502ec40..0cd5371 100644
--- a/dist/layers/LayerEsriTile.js.map
+++ b/dist/layers/LayerEsriTile.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerEsriTile.js","sourceRoot":"","sources":["../../src/layers/LayerEsriTile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;GAEG;AACH,2CAAsC;AACtC,uDAAoD;AAEpD,qDAAuD;AAGvD,IAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAM7B;;;GAGG;AACH;IAAmC,iCAAgB;IAG/C;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAAY,GAAW,EAAE,OAAkC;QAAlC,wBAAA,EAAA,YAAkC;QAA3D,iBAaC;QAZG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YACzB,GAAG,IAAI,GAAG,CAAC;SACd;QACD,GAAG,IAAI,kBAAkB,CAAC;QAE1B,QAAA,kBAAM,GAAG,EAAE,OAAO,CAAC,SAAC;QAEpB,KAAI,CAAC,aAAa,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7F,IAAI,KAAI,CAAC,aAAa,EAAE;YACpB,KAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;;IACL,CAAC;IAGD;;;OAGG;IACH,wCAAgB,GAAhB,UAAiB,iBAAsB;QAAvC,iBA2BC;QA3BgB,kCAAA,EAAA,sBAAsB;QACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,iBAAM,gBAAgB,YAAC,iBAAiB,CAAC,CAAC;SAC7C;aAAM;YACH,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;YAEvB,IAAI,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE;gBACrB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;aAClD;iBAAM;gBACH,OAAO;aACV;YAGD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACrC,OAAO,IAAI,GAAG,CAAC;aAClB;YAED,OAAO,IAAI,2BAA2B,CAAC;YAEvC,IAAI,gBAAc,GAAG,iBAAM,gBAAgB,CAAC;YAE5C,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,UAAC,CAAC;gBACjB,IAAI,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAC/C,gBAAc,CAAC,IAAI,CAAC,KAAI,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC,EAAE,MAAM,CAAC,CAAC;SACd;IACL,CAAC;IAGL,oBAAC;AAAD,CAAC,AAvED,CAAmC,mCAAgB,GAuElD;AAvEY,sCAAa;AAyE1B,EAAE,CAAC,gBAAgB,GAAG,aAAa,CAAC;AACpC,kBAAe,aAAa,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {LayerBaseXyzTile} from './LayerBaseXyzTile';\r\nimport {LayerBaseOptions} from './LayerBase'\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\n\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerEsriTileOptions extends LayerBaseOptions{\r\n    useEsriStyle?: boolean\r\n}\r\n\r\n/**\r\n * Esri tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nexport class LayerEsriTile extends LayerBaseXyzTile {\r\n    _useEsriStyle: boolean;\r\n\r\n    /**\r\n     * The Esri tile layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     */\r\n    constructor(url: string, options: LayerEsriTileOptions = {}) {\r\n        if (url.search(/\\/$/) == -1) {\r\n            url += '/';\r\n        }\r\n        url += 'tile/{z}/{y}/{x}';\r\n\r\n        super(url, options);\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent = ''): void {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            let urlCopy = this.url;\r\n\r\n            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');\r\n            if (mapServerIndex > -1) {\r\n                urlCopy = urlCopy.slice(0, mapServerIndex + 9);\r\n            } else {\r\n                return;\r\n            }\r\n\r\n\r\n            if (urlCopy[urlCopy.length - 1] !== '/') {\r\n                urlCopy += '/';\r\n            }\r\n\r\n            urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n            let superAddLegend = super.addLegendContent;\r\n\r\n            $.get(urlCopy, {}, (d) => {\r\n                let newHtml = esriToOl.makeMapServiceLegend(d);\r\n                superAddLegend.call(this, newHtml);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n}\r\n\r\nnm.LayerBaseXyzTile = LayerEsriTile;\r\nexport default LayerEsriTile;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerEsriTile.js","sourceRoot":"","sources":["../../src/layers/LayerEsriTile.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,6CAAsC;AACtC,yDAAoD;AAEpD,uDAAuD;AAGvD,MAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAM7B;;;GAGG;AACH,MAAa,aAAc,SAAQ,mCAAgB;IAG/C;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,GAAW,EAAE,UAAgC,EAAE;QACvD,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YACzB,GAAG,IAAI,GAAG,CAAC;SACd;QACD,GAAG,IAAI,kBAAkB,CAAC;QAE1B,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,aAAa,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7F,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;IACL,CAAC;IAGD;;;OAGG;IACH,gBAAgB,CAAC,iBAAiB,GAAG,EAAE;QACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;SAC7C;aAAM;YACH,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;YAEvB,IAAI,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE;gBACrB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;aAClD;iBAAM;gBACH,OAAO;aACV;YAGD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACrC,OAAO,IAAI,GAAG,CAAC;aAClB;YAED,OAAO,IAAI,2BAA2B,CAAC;YAEvC,IAAI,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAE5C,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;gBACrB,IAAI,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAC/C,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC,EAAE,MAAM,CAAC,CAAC;SACd;IACL,CAAC;CAGJ;AAvED,sCAuEC;AAED,EAAE,CAAC,gBAAgB,GAAG,aAAa,CAAC;AACpC,kBAAe,aAAa,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport {LayerBaseXyzTile} from './LayerBaseXyzTile';\r\nimport {LayerBaseOptions} from './LayerBase'\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\n\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerEsriTileOptions extends LayerBaseOptions{\r\n    useEsriStyle?: boolean\r\n}\r\n\r\n/**\r\n * Esri tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nexport class LayerEsriTile extends LayerBaseXyzTile {\r\n    _useEsriStyle: boolean;\r\n\r\n    /**\r\n     * The Esri tile layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     */\r\n    constructor(url: string, options: LayerEsriTileOptions = {}) {\r\n        if (url.search(/\\/$/) == -1) {\r\n            url += '/';\r\n        }\r\n        url += 'tile/{z}/{y}/{x}';\r\n\r\n        super(url, options);\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent = ''): void {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            let urlCopy = this.url;\r\n\r\n            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');\r\n            if (mapServerIndex > -1) {\r\n                urlCopy = urlCopy.slice(0, mapServerIndex + 9);\r\n            } else {\r\n                return;\r\n            }\r\n\r\n\r\n            if (urlCopy[urlCopy.length - 1] !== '/') {\r\n                urlCopy += '/';\r\n            }\r\n\r\n            urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n            let superAddLegend = super.addLegendContent;\r\n\r\n            $.get(urlCopy, {}, (d) => {\r\n                let newHtml = esriToOl.makeMapServiceLegend(d);\r\n                superAddLegend.call(this, newHtml);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n}\r\n\r\nnm.LayerBaseXyzTile = LayerEsriTile;\r\nexport default LayerEsriTile;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerItsInventory.js b/dist/layers/LayerItsInventory.js
index f2bc4bd..42e4401 100644
--- a/dist/layers/LayerItsInventory.js
+++ b/dist/layers/LayerItsInventory.js
@@ -2,34 +2,21 @@
 /**
  * Created by gavorhes on 12/8/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVectorGeoJson_1 = require("./LayerBaseVectorGeoJson");
-var mapPopup_1 = require("../olHelpers/mapPopup");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var projections_1 = require("../olHelpers/projections");
-var Style_1 = require("ol/style/Style");
-var Icon_1 = require("ol/style/Icon");
-var Stroke_1 = require("ol/style/Stroke");
-var Point_1 = require("ol/geom/Point");
-var nm = provide_1.default('layers');
+const LayerBaseVectorGeoJson_1 = require("./LayerBaseVectorGeoJson");
+const mapPopup_1 = require("../olHelpers/mapPopup");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const projections_1 = require("../olHelpers/projections");
+const Style_1 = require("ol/style/Style");
+const Icon_1 = require("ol/style/Icon");
+const Stroke_1 = require("ol/style/Stroke");
+const Point_1 = require("ol/geom/Point");
+let nm = provide_1.default('layers');
 function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     "use strict";
     //make sure one and only one configuration is defined;
-    var configCount = 0;
+    let configCount = 0;
     if (typeof itsIcon == 'string') {
         configCount++;
     }
@@ -53,7 +40,7 @@ function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
             itsLineConfig.lineArray = [];
         }
         // set the width if not defined
-        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
+        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
             if (itsLineConfig.lineArray[i].length == 3) {
                 itsLineConfig.lineArray[i].push(5);
             }
@@ -89,7 +76,7 @@ function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
 function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     "use strict";
     checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-    var _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';
+    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';
     if (itsIcon) {
         return new Style_1.default({
             image: new Icon_1.default({
@@ -108,10 +95,10 @@ function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     }
     else if (itsIconConfig) {
         return function (feature) {
-            var symbolProp = feature.getProperties()[itsIconConfig.prop];
-            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
-            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
-                var thisProp = itsIconConfig.iconArray[i];
+            let symbolProp = feature.getProperties()[itsIconConfig.prop];
+            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
+            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {
+                let thisProp = itsIconConfig.iconArray[i];
                 if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
                     iconUrl = _iconUrlRoot + thisProp[2];
                     break;
@@ -127,11 +114,11 @@ function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     }
     else if (itsLineConfig) {
         return function (feature) {
-            var symbolProp = feature.getProperties()[itsLineConfig.prop];
-            var colr = itsLineConfig.defaultColor || 'red';
-            var width = itsLineConfig.defaultWidth || 5;
-            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
-                var thisProp = itsLineConfig.lineArray[i];
+            let symbolProp = feature.getProperties()[itsLineConfig.prop];
+            let colr = itsLineConfig.defaultColor || 'red';
+            let width = itsLineConfig.defaultWidth || 5;
+            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
+                let thisProp = itsLineConfig.lineArray[i];
                 if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
                     colr = thisProp[2];
                     width = thisProp[3];
@@ -152,37 +139,35 @@ function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
 }
 function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
     "use strict";
-    var iconHeight = 17;
+    let iconHeight = 17;
     checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-    var _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';
+    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';
     if (itsIcon) {
-        return "<img src=\"" + (_iconUrlRoot + itsIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
+        return `<img src="${_iconUrlRoot + itsIcon}" class="legend-layer-icon" height="${iconHeight}">`;
     }
     else if (itsLineStyle) {
-        return "<hr style=\"height: " + itsLineStyle.width + "px; background-color: " + itsLineStyle.color + "\">";
+        return `<hr style="height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}">`;
     }
     else if (itsIconConfig) {
-        var outHtml = '';
+        let outHtml = '';
         outHtml += '<ul>';
-        for (var _i = 0, _a = itsIconConfig.iconArray; _i < _a.length; _i++) {
-            var a = _a[_i];
-            outHtml += "<li><span class=\"legend-layer-subitem\">" + a[1] + "</span><img src=\"" + (_iconUrlRoot + a[2]) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\">";
+        for (let a of itsIconConfig.iconArray) {
+            outHtml += `<li><span class="legend-layer-subitem">${a[1]}</span><img src="${_iconUrlRoot + a[2]}" class="legend-layer-icon" height="${iconHeight}">`;
         }
-        outHtml += "<li><span class=\"legend-layer-subitem\">" + itsIconConfig.defaultName + "</span>" +
-            ("<img src=\"" + (_iconUrlRoot + itsIconConfig.defaultIcon) + "\" class=\"legend-layer-icon\" height=\"" + iconHeight + "\"></li>");
+        outHtml += `<li><span class="legend-layer-subitem">${itsIconConfig.defaultName}</span>` +
+            `<img src="${_iconUrlRoot + itsIconConfig.defaultIcon}" class="legend-layer-icon" height="${iconHeight}"></li>`;
         outHtml += '</ul>';
         return outHtml;
     }
     else if (itsLineConfig) {
-        var outHtml = '';
+        let outHtml = '';
         outHtml += '<ul>';
-        for (var _b = 0, _c = itsLineConfig.lineArray; _b < _c.length; _b++) {
-            var ls = _c[_b];
-            outHtml += "<li><span class=\"legend-layer-subitem\">" + ls[1] + "</span>" +
-                ("<hr style=\"height: " + ls[3] + "px; background-color: " + ls[2] + "\">");
+        for (let ls of itsLineConfig.lineArray) {
+            outHtml += `<li><span class="legend-layer-subitem">${ls[1]}</span>` +
+                `<hr style="height: ${ls[3]}px; background-color: ${ls[2]}">`;
         }
-        outHtml += "<li><span class=\"legend-layer-subitem\">" + itsLineConfig.defaultName + "</span>" +
-            ("<hr style=\"height: " + itsLineConfig.defaultWidth + "px; background-color: " + itsLineConfig.defaultColor + "\"></li>");
+        outHtml += `<li><span class="legend-layer-subitem">${itsLineConfig.defaultName}</span>` +
+            `<hr style="height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}"></li>`;
         outHtml += '</ul>';
         return outHtml;
     }
@@ -194,8 +179,7 @@ function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
  * Its Layer class
  * @augments LayerBaseVectorGeoJson
  */
-var LayerItsInventory = /** @class */ (function (_super) {
-    __extends(LayerItsInventory, _super);
+class LayerItsInventory extends LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson {
     /**
      * ITS device layer, types available at https://transportal.cee.wisc.edu/its/inventory/
      * @param {object} options - config
@@ -240,13 +224,12 @@ var LayerItsInventory = /** @class */ (function (_super) {
      * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
      * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
      */
-    function LayerItsInventory(options) {
-        var _this = this;
+    constructor(options) {
         if (typeof options.itsType !== 'string') {
             throw 'its type must be defined';
         }
         options.transform = { dataProjection: projections_1.proj4326, featureProjection: projections_1.proj3857 };
-        var addToLegend = '';
+        let addToLegend = '';
         // define a style with the helper function if it is not explicitly defined
         if (typeof options.style == 'undefined') {
             options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
@@ -254,17 +237,16 @@ var LayerItsInventory = /** @class */ (function (_super) {
         }
         options.params = typeof options.params == 'object' ? options.params : {};
         $.extend(options.params, { format: 'JSON', resource: options.itsType });
-        _this = _super.call(this, 'https://transportal.cee.wisc.edu/its/inventory/', options) || this;
+        super('https://transportal.cee.wisc.edu/its/inventory/', options);
         //add any additional content to the legend
-        _this.addLegendContent(addToLegend);
+        this.addLegendContent(addToLegend);
         options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
         if (options.addPopup) {
-            mapPopup_1.default.addVectorPopup(_this, function (props) {
-                return "<iframe src=\"https://transportal.cee.wisc.edu/its/inventory/?feature=" + props.featureGuid + "\" " +
-                    "height=\"250\" width=\"350\"></iframe>";
+            mapPopup_1.default.addVectorPopup(this, function (props) {
+                return `<iframe src="https://transportal.cee.wisc.edu/its/inventory/?feature=${props.featureGuid}" ` +
+                    `height="250" width="350"></iframe>`;
             });
         }
-        return _this;
     }
     /**
      * callback to generate the parameters passed in the get request
@@ -276,23 +258,22 @@ var LayerItsInventory = /** @class */ (function (_super) {
      * @param {number} extent.maxY - maxY
      * @param {number} zoomLevel - zoom level
      */
-    LayerItsInventory.prototype.mapMoveMakeGetParams = function (extent, zoomLevel) {
-        _super.prototype.mapMoveMakeGetParams.call(this, extent, zoomLevel);
-        var lowerLeft = new Point_1.default([extent.minX, extent.minY]);
+    mapMoveMakeGetParams(extent, zoomLevel) {
+        super.mapMoveMakeGetParams(extent, zoomLevel);
+        let lowerLeft = new Point_1.default([extent.minX, extent.minY]);
         lowerLeft.transform(this.mapProj, this._projection4326);
-        var lowerLeftCoordinates = lowerLeft.getCoordinates();
-        var upperRight = new Point_1.default([extent.maxX, extent.maxY]);
+        let lowerLeftCoordinates = lowerLeft.getCoordinates();
+        let upperRight = new Point_1.default([extent.maxX, extent.maxY]);
         upperRight.transform(this.mapProj, this._projection4326);
-        var upperRightCoordinates = upperRight.getCoordinates();
+        let upperRightCoordinates = upperRight.getCoordinates();
         $.extend(this.mapMoveParams, {
             L: lowerLeftCoordinates[0],
             R: upperRightCoordinates[0],
             B: lowerLeftCoordinates[1],
             T: upperRightCoordinates[1]
         });
-    };
-    return LayerItsInventory;
-}(LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson));
+    }
+}
 exports.LayerItsInventory = LayerItsInventory;
 nm.LayerItsInventory = LayerItsInventory;
 exports.default = LayerItsInventory;
diff --git a/dist/layers/LayerItsInventory.js.map b/dist/layers/LayerItsInventory.js.map
index b07cb1a..13c1c3a 100644
--- a/dist/layers/LayerItsInventory.js.map
+++ b/dist/layers/LayerItsInventory.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerItsInventory.js","sourceRoot":"","sources":["../../src/layers/LayerItsInventory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from './LayerBaseVectorGeoJson';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {proj4326, proj3857} from '../olHelpers/projections';\r\nimport Style from 'ol/style/Style';\r\nimport Icon from 'ol/style/Icon';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Feature from 'ol/Feature';\r\nimport Point from 'ol/geom/Point';\r\nimport {iStyleFunc} from \"../olHelpers/esriToOlStyle\";\r\n\r\n\r\nlet nm = provide('layers');\r\n\r\n\r\nexport interface iLineStyle {\r\n    color: string;\r\n    width?: number\r\n}\r\n\r\nexport interface iMultiConfig {\r\n    prop: string;\r\n    defaultName: string;\r\n}\r\n\r\nexport interface iIconConfig extends iMultiConfig {\r\n    defaultIcon: string;\r\n    iconArray: string[][]\r\n}\r\n\r\nexport interface iLineConfig extends iMultiConfig {\r\n    defaultColor: string;\r\n    defaultWidth?: number;\r\n    lineArray: any[][]\r\n}\r\n\r\nexport interface iLayerItsInventory extends LayerBaseVectorGeoJsonOptions {\r\n    itsType: string;\r\n    addPopup?: boolean;\r\n    itsIcon?: string;\r\n    itsLineStyle?: iLineStyle;\r\n    itsIconConfig?: iIconConfig;\r\n    itsLineConfig?: iLineConfig\r\n}\r\n\r\n\r\n\r\n\r\nfunction checkStyleNumber(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see https://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig): Style |Style[]|iStyleFunc  {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new Style({\r\n            image: new Icon(\r\n                {\r\n                    src: _iconUrlRoot + itsIcon,\r\n                    crossOrigin: 'anonymous'\r\n                }\r\n            )\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new Style({\r\n            stroke: new Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature: Feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new Style({\r\n                image: new Icon(\r\n                    {\r\n                        src: iconUrl,\r\n                        crossOrigin: 'anonymous'\r\n                    }\r\n                )\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature: Feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new Style({\r\n                stroke: new Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nfunction defineLegend(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nexport class LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at https://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at https://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see https://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options: iLayerItsInventory) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        options.transform = {dataProjection: proj4326, featureProjection: proj3857};\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('https://transportal.cee.wisc.edu/its/inventory/', options);\r\n\r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props: { featureGuid: string }) {\r\n                return `<iframe src=\"https://transportal.cee.wisc.edu/its/inventory/?feature=${props.featureGuid}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: { minX: number, minY: number, maxX: number, maxY: number }, zoomLevel: number) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapProj, this._projection4326);\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapProj, this._projection4326);\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerItsInventory.js","sourceRoot":"","sources":["../../src/layers/LayerItsInventory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from './LayerBaseVectorGeoJson';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport $ = require('jquery');\r\nimport {proj4326, proj3857} from '../olHelpers/projections';\r\nimport Style from 'ol/style/Style';\r\nimport Icon from 'ol/style/Icon';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Feature from 'ol/Feature';\r\nimport Point from 'ol/geom/Point';\r\nimport {iStyleFunc} from \"../olHelpers/esriToOlStyle\";\r\n\r\n\r\nlet nm = provide('layers');\r\n\r\n\r\nexport interface iLineStyle {\r\n    color: string;\r\n    width?: number\r\n}\r\n\r\nexport interface iMultiConfig {\r\n    prop: string;\r\n    defaultName: string;\r\n}\r\n\r\nexport interface iIconConfig extends iMultiConfig {\r\n    defaultIcon: string;\r\n    iconArray: string[][]\r\n}\r\n\r\nexport interface iLineConfig extends iMultiConfig {\r\n    defaultColor: string;\r\n    defaultWidth?: number;\r\n    lineArray: any[][]\r\n}\r\n\r\nexport interface iLayerItsInventory extends LayerBaseVectorGeoJsonOptions {\r\n    itsType: string;\r\n    addPopup?: boolean;\r\n    itsIcon?: string;\r\n    itsLineStyle?: iLineStyle;\r\n    itsIconConfig?: iIconConfig;\r\n    itsLineConfig?: iLineConfig\r\n}\r\n\r\n\r\n\r\n\r\nfunction checkStyleNumber(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see https://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig): Style |Style[]|iStyleFunc  {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new Style({\r\n            image: new Icon(\r\n                {\r\n                    src: _iconUrlRoot + itsIcon,\r\n                    crossOrigin: 'anonymous'\r\n                }\r\n            )\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new Style({\r\n            stroke: new Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature: Feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new Style({\r\n                image: new Icon(\r\n                    {\r\n                        src: iconUrl,\r\n                        crossOrigin: 'anonymous'\r\n                    }\r\n                )\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature: Feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new Style({\r\n                stroke: new Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nfunction defineLegend(itsIcon: string, itsLineStyle: iLineStyle, itsIconConfig: iIconConfig, itsLineConfig: iLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'https://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nexport class LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at https://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at https://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see https://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options: iLayerItsInventory) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        options.transform = {dataProjection: proj4326, featureProjection: proj3857};\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('https://transportal.cee.wisc.edu/its/inventory/', options);\r\n\r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props: { featureGuid: string }) {\r\n                return `<iframe src=\"https://transportal.cee.wisc.edu/its/inventory/?feature=${props.featureGuid}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent: { minX: number, minY: number, maxX: number, maxY: number }, zoomLevel: number) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapProj, this._projection4326);\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapProj, this._projection4326);\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerRealEarthTile.js b/dist/layers/LayerRealEarthTile.js
index 889963c..6b38634 100644
--- a/dist/layers/LayerRealEarthTile.js
+++ b/dist/layers/LayerRealEarthTile.js
@@ -2,30 +2,16 @@
 /**
  * Created by gavorhes on 11/4/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseXyzTile_1 = require("./LayerBaseXyzTile");
-var RealEarthAnimateTile_1 = require("../mixin/RealEarthAnimateTile");
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('layers');
+const LayerBaseXyzTile_1 = require("./LayerBaseXyzTile");
+const RealEarthAnimateTile_1 = require("../mixin/RealEarthAnimateTile");
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('layers');
 /**
  * Real earth tile
  * @augments LayerBaseXyzTile
  */
-var LayerRealEarthTile = /** @class */ (function (_super) {
-    __extends(LayerRealEarthTile, _super);
+class LayerRealEarthTile extends LayerBaseXyzTile_1.LayerBaseXyzTile {
     /**
      * The base layer for all others
      * @param {object} options - config
@@ -46,37 +32,34 @@ var LayerRealEarthTile = /** @class */ (function (_super) {
      * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
      * @param {boolean} [options.animate=false] if the layer should be animated
      */
-    function LayerRealEarthTile(options) {
-        var _this = this;
+    constructor(options) {
         options.animate = typeof options.animate == 'boolean' ? options.animate : false;
         if (options.animate) {
-            _this = _super.call(this, '', options) || this;
-            _this._products = options.products;
-            _this.animator = new RealEarthAnimateTile_1.default(_this, options.timeLoadCallback);
-            _this.animator.timeInit();
+            super('', options);
+            this._products = options.products;
+            this.animator = new RealEarthAnimateTile_1.default(this, options.timeLoadCallback);
+            this.animator.timeInit();
         }
         else {
-            _this = _super.call(this, "http://realearth.ssec.wisc.edu/api/image?products=" + options.products + "&x={x}&y={y}&z={z}", options) || this;
-            _this._products = options.products;
+            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);
+            this._products = options.products;
         }
-        return _this;
     }
-    LayerRealEarthTile.prototype.setLayerTime = function (theTime) {
+    setLayerTime(theTime) {
         if (this.animator) {
             return this.animator.setLayerTime(theTime);
         }
         else {
             return false;
         }
-    };
-    LayerRealEarthTile.prototype._load = function () {
+    }
+    _load() {
         if (this.animator) {
             return false;
         }
-        return _super.prototype._load.call(this);
-    };
-    return LayerRealEarthTile;
-}(LayerBaseXyzTile_1.LayerBaseXyzTile));
+        return super._load();
+    }
+}
 exports.LayerRealEarthTile = LayerRealEarthTile;
 nm.LayerRealEarthTile = LayerRealEarthTile;
 exports.default = LayerRealEarthTile;
diff --git a/dist/layers/LayerRealEarthTile.js.map b/dist/layers/LayerRealEarthTile.js.map
index f3b6700..ebfa20f 100644
--- a/dist/layers/LayerRealEarthTile.js.map
+++ b/dist/layers/LayerRealEarthTile.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerRealEarthTile.js","sourceRoot":"","sources":["../../src/layers/LayerRealEarthTile.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAEH,uDAAoD;AAEpD,sEAAiE;AACjE,2CAAsC;AAEtC,IAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAU7B;;;GAGG;AACH;IAAwC,sCAAgB;IAIpD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,4BAAY,OAAkC;QAA9C,iBAWC;QAVG,OAAO,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAChF,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,QAAA,kBAAM,EAAE,EAAE,OAAO,CAAC,SAAC;YACnB,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,KAAI,CAAC,QAAQ,GAAG,IAAI,8BAAoB,CAAC,KAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACzE,KAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC5B;aAAM;YACH,QAAA,kBAAM,uDAAqD,OAAO,CAAC,QAAQ,uBAAoB,EAAE,OAAO,CAAC,SAAC;YAC1G,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;SACrC;;IACL,CAAC;IAED,yCAAY,GAAZ,UAAa,OAAe;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC9C;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,kCAAK,GAAL;QACI,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,iBAAM,KAAK,WAAE,CAAC;IACzB,CAAC;IACL,yBAAC;AAAD,CAAC,AAnDD,CAAwC,mCAAgB,GAmDvD;AAnDY,gDAAkB;AAqD/B,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C,kBAAe,kBAAkB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nimport {LayerBaseXyzTile} from './LayerBaseXyzTile';\r\nimport {LayerBaseOptions} from './LayerBase';\r\nimport RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';\r\nimport provide from '../util/provide';\r\nimport {IRealEarthAnimate, timesLoadedCallback} from \"../mixin/RealEarthAnimate\";\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerRealEarthTileOptions extends LayerBaseOptions {\r\n    products: string;\r\n    animate?: boolean;\r\n    timeLoadCallback?: timesLoadedCallback;\r\n}\r\n\r\n\r\n\r\n/**\r\n * Real earth tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nexport class LayerRealEarthTile extends LayerBaseXyzTile implements IRealEarthAnimate {\r\n    _products: string;\r\n    animator: RealEarthAnimateTile;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {string} options.products - the products to request\r\n     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates\r\n     * @param {boolean} [options.animate=false] if the layer should be animated\r\n     */\r\n    constructor(options: LayerRealEarthTileOptions) {\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            super('', options);\r\n            this._products = options.products;\r\n            this.animator = new RealEarthAnimateTile(this, options.timeLoadCallback);\r\n            this.animator.timeInit();\r\n        } else {\r\n            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);\r\n            this._products = options.products;\r\n        }\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _load(): boolean {\r\n        if (this.animator) {\r\n            return false;\r\n        }\r\n        return super._load();\r\n    }\r\n}\r\n\r\nnm.LayerRealEarthTile = LayerRealEarthTile;\r\nexport default LayerRealEarthTile;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerRealEarthTile.js","sourceRoot":"","sources":["../../src/layers/LayerRealEarthTile.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,yDAAoD;AAEpD,wEAAiE;AACjE,6CAAsC;AAEtC,MAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAU7B;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,mCAAgB;IAIpD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,YAAY,OAAkC;QAC1C,OAAO,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAChF,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,8BAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC5B;aAAM;YACH,KAAK,CAAC,qDAAqD,OAAO,CAAC,QAAQ,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC1G,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;SACrC;IACL,CAAC;IAED,YAAY,CAAC,OAAe;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC9C;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ;AAnDD,gDAmDC;AAED,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C,kBAAe,kBAAkB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nimport {LayerBaseXyzTile} from './LayerBaseXyzTile';\r\nimport {LayerBaseOptions} from './LayerBase';\r\nimport RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';\r\nimport provide from '../util/provide';\r\nimport {IRealEarthAnimate, timesLoadedCallback} from \"../mixin/RealEarthAnimate\";\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerRealEarthTileOptions extends LayerBaseOptions {\r\n    products: string;\r\n    animate?: boolean;\r\n    timeLoadCallback?: timesLoadedCallback;\r\n}\r\n\r\n\r\n\r\n/**\r\n * Real earth tile\r\n * @augments LayerBaseXyzTile\r\n */\r\nexport class LayerRealEarthTile extends LayerBaseXyzTile implements IRealEarthAnimate {\r\n    _products: string;\r\n    animator: RealEarthAnimateTile;\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {string} options.products - the products to request\r\n     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates\r\n     * @param {boolean} [options.animate=false] if the layer should be animated\r\n     */\r\n    constructor(options: LayerRealEarthTileOptions) {\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            super('', options);\r\n            this._products = options.products;\r\n            this.animator = new RealEarthAnimateTile(this, options.timeLoadCallback);\r\n            this.animator.timeInit();\r\n        } else {\r\n            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);\r\n            this._products = options.products;\r\n        }\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _load(): boolean {\r\n        if (this.animator) {\r\n            return false;\r\n        }\r\n        return super._load();\r\n    }\r\n}\r\n\r\nnm.LayerRealEarthTile = LayerRealEarthTile;\r\nexport default LayerRealEarthTile;\r\n"]}
\ No newline at end of file
diff --git a/dist/layers/LayerRealEarthVector.js b/dist/layers/LayerRealEarthVector.js
index 577e260..cfc1b95 100644
--- a/dist/layers/LayerRealEarthVector.js
+++ b/dist/layers/LayerRealEarthVector.js
@@ -2,30 +2,16 @@
 /**
  * Created by gavorhes on 11/13/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var LayerBaseVectorGeoJson_1 = require("./LayerBaseVectorGeoJson");
-var RealEarthAnimateVector_1 = require("../mixin/RealEarthAnimateVector");
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('layers');
+const LayerBaseVectorGeoJson_1 = require("./LayerBaseVectorGeoJson");
+const RealEarthAnimateVector_1 = require("../mixin/RealEarthAnimateVector");
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('layers');
 /**
  * Vector real earth vector
  * @augments LayerBaseVectorGeoJson
  */
-var LayerVectorRealEarth = /** @class */ (function (_super) {
-    __extends(LayerVectorRealEarth, _super);
+class LayerVectorRealEarth extends LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson {
     /**
      * Real Earth vector layer
      * @param {object} options - config
@@ -55,38 +41,35 @@ var LayerVectorRealEarth = /** @class */ (function (_super) {
      * @param {string} options.products real earth products identifier
      * @param {boolean} [options.animate=false] if the layer should be animated
      */
-    function LayerVectorRealEarth(options) {
-        var _this = this;
+    constructor(options) {
         options.animate = typeof options.animate == 'boolean' ? options.animate : false;
         if (options.animate) {
             options.autoLoad = false;
-            _this = _super.call(this, '', options) || this;
-            _this._products = options.products;
-            _this.animator = new RealEarthAnimateVector_1.default(_this, options.timeLoadCallback);
-            _this.animator.timeInit();
+            super('', options);
+            this._products = options.products;
+            this.animator = new RealEarthAnimateVector_1.default(this, options.timeLoadCallback);
+            this.animator.timeInit();
         }
         else {
             options.params = { products: options.products };
-            _this = _super.call(this, 'http://realearth.ssec.wisc.edu/api/shapes', options) || this;
+            super('http://realearth.ssec.wisc.edu/api/shapes', options);
         }
-        return _this;
     }
-    LayerVectorRealEarth.prototype.setLayerTime = function (theTime) {
+    setLayerTime(theTime) {
         if (this.animator) {
             return this.animator.setLayerTime(theTime);
         }
         else {
             return false;
         }
-    };
-    LayerVectorRealEarth.prototype._load = function () {
+    }
+    _load() {
         if (this.animator) {
             return false;
         }
-        return _super.prototype._load.call(this);
-    };
-    return LayerVectorRealEarth;
-}(LayerBaseVectorGeoJson_1.LayerBaseVectorGeoJson));
+        return super._load();
+    }
+}
 exports.LayerVectorRealEarth = LayerVectorRealEarth;
 nm.LayerVectorRealEarth = LayerVectorRealEarth;
 exports.default = LayerVectorRealEarth;
diff --git a/dist/layers/LayerRealEarthVector.js.map b/dist/layers/LayerRealEarthVector.js.map
index 9e48fff..ae2ff2f 100644
--- a/dist/layers/LayerRealEarthVector.js.map
+++ b/dist/layers/LayerRealEarthVector.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerRealEarthVector.js","sourceRoot":"","sources":["../../src/layers/LayerRealEarthVector.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAEH,mEAA+F;AAC/F,0EAAqE;AACrE,2CAAsC;AAGtC,IAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAS7B;;;GAGG;AACH;IAA0C,wCAAsB;IAI5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,8BAAY,OAAoC;QAAhD,iBAYC;QAXG,OAAO,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAChF,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,QAAA,kBAAM,EAAE,EAAE,OAAO,CAAC,SAAC;YACnB,KAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,KAAI,CAAC,QAAQ,GAAG,IAAI,gCAAsB,CAAC,KAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3E,KAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC5B;aAAM;YACH,OAAO,CAAC,MAAM,GAAG,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC;YAC9C,QAAA,kBAAM,2CAA2C,EAAE,OAAO,CAAC,SAAC;SAC/D;;IACL,CAAC;IAED,2CAAY,GAAZ,UAAa,OAAe;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC9C;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,oCAAK,GAAL;QACI,IAAI,IAAI,CAAC,QAAQ,EAAC;YACd,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,iBAAM,KAAK,WAAE,CAAC;IACzB,CAAC;IAGL,2BAAC;AAAD,CAAC,AA/DD,CAA0C,+CAAsB,GA+D/D;AA/DY,oDAAoB;AAiEjC,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAC/C,kBAAe,oBAAoB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/13/2015.\r\n */\r\n\r\nimport {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from './LayerBaseVectorGeoJson';\r\nimport RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';\r\nimport provide from '../util/provide';\r\nimport {IRealEarthAnimate, timesLoadedCallback} from \"../mixin/RealEarthAnimate\";\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerVectorRealEarthOptions extends LayerBaseVectorGeoJsonOptions {\r\n    products: string;\r\n    animate?: boolean;\r\n    timeLoadCallback?: timesLoadedCallback;\r\n}\r\n\r\n\r\n/**\r\n * Vector real earth vector\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nexport class LayerVectorRealEarth extends LayerBaseVectorGeoJson implements IRealEarthAnimate {\r\n    _products: string;\r\n    animator: RealEarthAnimateVector;\r\n\r\n    /**\r\n     * Real Earth vector layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     *\r\n     * @param {string} options.products real earth products identifier\r\n     * @param {boolean} [options.animate=false] if the layer should be animated\r\n     */\r\n    constructor(options: LayerVectorRealEarthOptions) {\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            options.autoLoad = false;\r\n            super('', options);\r\n            this._products = options.products;\r\n            this.animator = new RealEarthAnimateVector(this, options.timeLoadCallback);\r\n            this.animator.timeInit();\r\n        } else {\r\n            options.params = {products: options.products};\r\n            super('http://realearth.ssec.wisc.edu/api/shapes', options);\r\n        }\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _load(): boolean{\r\n        if (this.animator){\r\n            return false;\r\n        }\r\n        return super._load();\r\n    }\r\n\r\n\r\n}\r\n\r\nnm.LayerVectorRealEarth = LayerVectorRealEarth;\r\nexport default LayerVectorRealEarth;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerRealEarthVector.js","sourceRoot":"","sources":["../../src/layers/LayerRealEarthVector.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qEAA+F;AAC/F,4EAAqE;AACrE,6CAAsC;AAGtC,MAAM,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAS7B;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,+CAAsB;IAI5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,YAAY,OAAoC;QAC5C,OAAO,CAAC,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAChF,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC5B;aAAM;YACH,OAAO,CAAC,MAAM,GAAG,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC;YAC9C,KAAK,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;SAC/D;IACL,CAAC;IAED,YAAY,CAAC,OAAe;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SAC9C;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,QAAQ,EAAC;YACd,OAAO,KAAK,CAAC;SAChB;QACD,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CAGJ;AA/DD,oDA+DC;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAC/C,kBAAe,oBAAoB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/13/2015.\r\n */\r\n\r\nimport {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from './LayerBaseVectorGeoJson';\r\nimport RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';\r\nimport provide from '../util/provide';\r\nimport {IRealEarthAnimate, timesLoadedCallback} from \"../mixin/RealEarthAnimate\";\r\n\r\nconst nm = provide('layers');\r\n\r\nexport interface LayerVectorRealEarthOptions extends LayerBaseVectorGeoJsonOptions {\r\n    products: string;\r\n    animate?: boolean;\r\n    timeLoadCallback?: timesLoadedCallback;\r\n}\r\n\r\n\r\n/**\r\n * Vector real earth vector\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nexport class LayerVectorRealEarth extends LayerBaseVectorGeoJson implements IRealEarthAnimate {\r\n    _products: string;\r\n    animator: RealEarthAnimateVector;\r\n\r\n    /**\r\n     * Real Earth vector layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     *\r\n     * @param {string} options.products real earth products identifier\r\n     * @param {boolean} [options.animate=false] if the layer should be animated\r\n     */\r\n    constructor(options: LayerVectorRealEarthOptions) {\r\n        options.animate = typeof options.animate == 'boolean' ? options.animate : false;\r\n        if (options.animate) {\r\n            options.autoLoad = false;\r\n            super('', options);\r\n            this._products = options.products;\r\n            this.animator = new RealEarthAnimateVector(this, options.timeLoadCallback);\r\n            this.animator.timeInit();\r\n        } else {\r\n            options.params = {products: options.products};\r\n            super('http://realearth.ssec.wisc.edu/api/shapes', options);\r\n        }\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (this.animator) {\r\n            return this.animator.setLayerTime(theTime);\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    _load(): boolean{\r\n        if (this.animator){\r\n            return false;\r\n        }\r\n        return super._load();\r\n    }\r\n\r\n\r\n}\r\n\r\nnm.LayerVectorRealEarth = LayerVectorRealEarth;\r\nexport default LayerVectorRealEarth;\r\n"]}
\ No newline at end of file
diff --git a/dist/mixin/RealEarthAnimate.js b/dist/mixin/RealEarthAnimate.js
index 4152ba4..48075e0 100644
--- a/dist/mixin/RealEarthAnimate.js
+++ b/dist/mixin/RealEarthAnimate.js
@@ -3,21 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/4/2015.
  */
-var provide_1 = require("../util/provide");
-var mapPopup_1 = require("../olHelpers/mapPopup");
-var $ = require("jquery");
-var nm = provide_1.default('mixin');
+const provide_1 = require("../util/provide");
+const mapPopup_1 = require("../olHelpers/mapPopup");
+const $ = require("jquery");
+const nm = provide_1.default('mixin');
 /**
  * The GMT offset time in minutes
  * @type {number}
  */
-var offsetMinutes = (new Date()).getTimezoneOffset();
+let offsetMinutes = (new Date()).getTimezoneOffset();
 /**
  * Mixin to get the product times
  * Be sure to call getTimeInit after the mixin has been applied
  */
-var RealEarthAnimate = /** @class */ (function () {
-    function RealEarthAnimate(lyr, loadCallback) {
+class RealEarthAnimate {
+    constructor(lyr, loadCallback) {
         this.lyr = lyr;
         this._products = lyr._products;
         if (loadCallback) {
@@ -30,8 +30,7 @@ var RealEarthAnimate = /** @class */ (function () {
     /**
      * Call this after the mixin has been applied
      */
-    RealEarthAnimate.prototype.timeInit = function () {
-        var _this = this;
+    timeInit() {
         this._rawDateStrings = [];
         this._localDates = [];
         this.localTimes = [];
@@ -39,47 +38,47 @@ var RealEarthAnimate = /** @class */ (function () {
         // this._loaded = true;
         this._currentTime = undefined;
         this._currentIndex = undefined;
-        $.get('http://realearth.ssec.wisc.edu/api/products', { products: this._products }, function (d) {
+        $.get('http://realearth.ssec.wisc.edu/api/products', { products: this._products }, (d) => {
             if (d.length == 0) {
-                console.log(_this._products + " layer not available or does not have times");
+                console.log(`${this._products} layer not available or does not have times`);
                 return;
             }
             d = d[0];
-            for (var i = 0; i < d['times'].length; i++) {
-                _this._loadDates.call(_this, d['times'][i]);
+            for (let i = 0; i < d['times'].length; i++) {
+                this._loadDates.call(this, d['times'][i]);
             }
-            _this.loadCallback.call(_this.lyr, _this.lyr);
-            _this._loadLatest.call(_this);
+            this.loadCallback.call(this.lyr, this.lyr);
+            this._loadLatest.call(this);
         }, 'json');
-    };
+    }
     /**
      * Given the raw time string, add to the arrays to keep track of dates and cache
      * @param {string} inString - input string to parse
      * @returns {string} the converted string
      * @protected
      */
-    RealEarthAnimate.prototype._loadDates = function (inString) {
-        var yr = inString.slice(0, 4);
-        var month = inString.slice(4, 6);
-        var d = inString.slice(6, 8);
-        var hr = inString.slice(9, 11);
-        var mn = inString.slice(11, 13);
-        var sec = inString.slice(13, 15);
-        var rawDateStr = inString.replace('.', '_');
+    _loadDates(inString) {
+        let yr = inString.slice(0, 4);
+        let month = inString.slice(4, 6);
+        let d = inString.slice(6, 8);
+        let hr = inString.slice(9, 11);
+        let mn = inString.slice(11, 13);
+        let sec = inString.slice(13, 15);
+        let rawDateStr = inString.replace('.', '_');
         this._rawDateStrings.push(rawDateStr);
-        var dteStr = month + "/" + d + "/" + yr + " " + hr + ":" + mn + ":" + sec;
-        var newDte = new Date(dteStr);
+        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;
+        let newDte = new Date(dteStr);
         newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
         this._localDates.push(newDte);
         this.localTimes.push(newDte.getTime());
         return rawDateStr;
-    };
+    }
     /**
      *
      * @protected
      * @returns {boolean} if should continue
      */
-    RealEarthAnimate.prototype._loadLatest = function () {
+    _loadLatest() {
         mapPopup_1.default.closePopup();
         if (this.localTimes.length > 0) {
             this._currentIndex = this.localTimes.length - 1;
@@ -88,22 +87,22 @@ var RealEarthAnimate = /** @class */ (function () {
         else {
             return false;
         }
-    };
+    }
     /**
      *
      * @param {number} theTime - the time
      * @returns {boolean} true if new index, false if the same or below lowest value
      */
-    RealEarthAnimate.prototype.setLayerTime = function (theTime) {
+    setLayerTime(theTime) {
         this._currentTime = theTime;
-        var newIndex;
+        let newIndex;
         if (theTime < this.localTimes[0]) {
             return false;
         }
         else if (theTime > this.localTimes[this.localTimes.length - 1]) {
             newIndex = this.localTimes.length - 1;
         }
-        for (var i = 0; i < this.localTimes.length; i++) {
+        for (let i = 0; i < this.localTimes.length; i++) {
             if (this.localTimes[i] >= theTime) {
                 newIndex = i;
                 break;
@@ -117,9 +116,8 @@ var RealEarthAnimate = /** @class */ (function () {
             mapPopup_1.default.closePopup();
             return true;
         }
-    };
-    return RealEarthAnimate;
-}());
+    }
+}
 exports.RealEarthAnimate = RealEarthAnimate;
 nm.RealEarthAnimate = RealEarthAnimate;
 exports.default = RealEarthAnimate;
diff --git a/dist/mixin/RealEarthAnimate.js.map b/dist/mixin/RealEarthAnimate.js.map
index c44d092..fbcacca 100644
--- a/dist/mixin/RealEarthAnimate.js.map
+++ b/dist/mixin/RealEarthAnimate.js.map
@@ -1 +1 @@
-{"version":3,"file":"RealEarthAnimate.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {LayerVectorRealEarth} from '../layers/LayerRealEarthVector'\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('mixin');\r\n\r\n\r\n/**\r\n * The GMT offset time in minutes\r\n * @type {number}\r\n */\r\nlet offsetMinutes = (new Date()).getTimezoneOffset();\r\n\r\nexport interface IRealEarthAnimate{\r\n    setLayerTime(theTime: number): boolean;\r\n}\r\n\r\nexport interface timesLoadedCallback{\r\n    (lyr?: LayerRealEarthTile|LayerVectorRealEarth): void;\r\n}\r\n\r\n\r\n/**\r\n * Mixin to get the product times\r\n * Be sure to call getTimeInit after the mixin has been applied\r\n */\r\nexport class RealEarthAnimate {\r\n    _animateEnabled: boolean;\r\n    _currentIndex: number;\r\n    _localDates: Date[];\r\n    _rawDateStrings: string[];\r\n    _products: string;\r\n    loadCallback: timesLoadedCallback;\r\n    localTimes: number[];\r\n    _currentTime: number;\r\n\r\n    lyr: LayerRealEarthTile|LayerVectorRealEarth;\r\n\r\n    constructor(lyr: LayerRealEarthTile|LayerVectorRealEarth, loadCallback?: timesLoadedCallback){\r\n        this.lyr = lyr;\r\n        this._products = lyr._products;\r\n        if (loadCallback){\r\n            this.loadCallback = loadCallback;\r\n        } else {\r\n            this.loadCallback = function(): void {return;};\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    timeInit() {\r\n\r\n        this._rawDateStrings = [];\r\n        this._localDates = [];\r\n        this.localTimes = [];\r\n        this._animateEnabled = true;\r\n        // this._loaded = true;\r\n        this._currentTime = undefined;\r\n        this._currentIndex = undefined;\r\n\r\n        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, (d) => {\r\n            if (d.length == 0) {\r\n                console.log(`${this._products} layer not available or does not have times`);\r\n\r\n                return;\r\n            }\r\n            d = d[0];\r\n            for (let i = 0; i < d['times'].length; i++) {\r\n                this._loadDates.call(this, d['times'][i]);\r\n            }\r\n            this.loadCallback.call(this.lyr, this.lyr);\r\n            this._loadLatest.call(this);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    /**\r\n     * Given the raw time string, add to the arrays to keep track of dates and cache\r\n     * @param {string} inString - input string to parse\r\n     * @returns {string} the converted string\r\n     * @protected\r\n     */\r\n    _loadDates(inString: string): string {\r\n        let yr = inString.slice(0, 4);\r\n        let month = inString.slice(4, 6);\r\n        let d = inString.slice(6, 8);\r\n        let hr = inString.slice(9, 11);\r\n        let mn = inString.slice(11, 13);\r\n        let sec = inString.slice(13, 15);\r\n\r\n        let rawDateStr = inString.replace('.', '_');\r\n        this._rawDateStrings.push(rawDateStr);\r\n\r\n        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;\r\n        let newDte = new Date(dteStr);\r\n        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);\r\n        this._localDates.push(newDte);\r\n        this.localTimes.push(newDte.getTime());\r\n\r\n        return rawDateStr;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @protected\r\n     * @returns {boolean} if should continue\r\n     */\r\n    _loadLatest(){\r\n        mapPopup.closePopup();\r\n        if (this.localTimes.length > 0){\r\n            this._currentIndex = this.localTimes.length -1;\r\n\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} theTime - the time\r\n     * @returns {boolean} true if new index, false if the same or below lowest value\r\n     */\r\n    setLayerTime(theTime: number): boolean{\r\n\r\n        this._currentTime = theTime;\r\n\r\n        let newIndex;\r\n\r\n        if (theTime < this.localTimes[0]){\r\n            return false;\r\n        } else if (theTime > this.localTimes[this.localTimes.length - 1]){\r\n            newIndex = this.localTimes.length - 1;\r\n        }\r\n\r\n        for (let i = 0; i < this.localTimes.length; i++){\r\n            if (this.localTimes[i] >= theTime){\r\n                newIndex = i;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (newIndex == this._currentIndex){\r\n            return false;\r\n        } else {\r\n            this._currentIndex = newIndex;\r\n            mapPopup.closePopup();\r\n\r\n            return true;\r\n        }\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimate = RealEarthAnimate;\r\nexport default RealEarthAnimate;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"RealEarthAnimate.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nimport {LayerVectorRealEarth} from '../layers/LayerRealEarthVector'\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('mixin');\r\n\r\n\r\n/**\r\n * The GMT offset time in minutes\r\n * @type {number}\r\n */\r\nlet offsetMinutes = (new Date()).getTimezoneOffset();\r\n\r\nexport interface IRealEarthAnimate{\r\n    setLayerTime(theTime: number): boolean;\r\n}\r\n\r\nexport interface timesLoadedCallback{\r\n    (lyr?: LayerRealEarthTile|LayerVectorRealEarth): void;\r\n}\r\n\r\n\r\n/**\r\n * Mixin to get the product times\r\n * Be sure to call getTimeInit after the mixin has been applied\r\n */\r\nexport class RealEarthAnimate {\r\n    _animateEnabled: boolean;\r\n    _currentIndex: number;\r\n    _localDates: Date[];\r\n    _rawDateStrings: string[];\r\n    _products: string;\r\n    loadCallback: timesLoadedCallback;\r\n    localTimes: number[];\r\n    _currentTime: number;\r\n\r\n    lyr: LayerRealEarthTile|LayerVectorRealEarth;\r\n\r\n    constructor(lyr: LayerRealEarthTile|LayerVectorRealEarth, loadCallback?: timesLoadedCallback){\r\n        this.lyr = lyr;\r\n        this._products = lyr._products;\r\n        if (loadCallback){\r\n            this.loadCallback = loadCallback;\r\n        } else {\r\n            this.loadCallback = function(): void {return;};\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    timeInit() {\r\n\r\n        this._rawDateStrings = [];\r\n        this._localDates = [];\r\n        this.localTimes = [];\r\n        this._animateEnabled = true;\r\n        // this._loaded = true;\r\n        this._currentTime = undefined;\r\n        this._currentIndex = undefined;\r\n\r\n        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, (d) => {\r\n            if (d.length == 0) {\r\n                console.log(`${this._products} layer not available or does not have times`);\r\n\r\n                return;\r\n            }\r\n            d = d[0];\r\n            for (let i = 0; i < d['times'].length; i++) {\r\n                this._loadDates.call(this, d['times'][i]);\r\n            }\r\n            this.loadCallback.call(this.lyr, this.lyr);\r\n            this._loadLatest.call(this);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    /**\r\n     * Given the raw time string, add to the arrays to keep track of dates and cache\r\n     * @param {string} inString - input string to parse\r\n     * @returns {string} the converted string\r\n     * @protected\r\n     */\r\n    _loadDates(inString: string): string {\r\n        let yr = inString.slice(0, 4);\r\n        let month = inString.slice(4, 6);\r\n        let d = inString.slice(6, 8);\r\n        let hr = inString.slice(9, 11);\r\n        let mn = inString.slice(11, 13);\r\n        let sec = inString.slice(13, 15);\r\n\r\n        let rawDateStr = inString.replace('.', '_');\r\n        this._rawDateStrings.push(rawDateStr);\r\n\r\n        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;\r\n        let newDte = new Date(dteStr);\r\n        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);\r\n        this._localDates.push(newDte);\r\n        this.localTimes.push(newDte.getTime());\r\n\r\n        return rawDateStr;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @protected\r\n     * @returns {boolean} if should continue\r\n     */\r\n    _loadLatest(){\r\n        mapPopup.closePopup();\r\n        if (this.localTimes.length > 0){\r\n            this._currentIndex = this.localTimes.length -1;\r\n\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} theTime - the time\r\n     * @returns {boolean} true if new index, false if the same or below lowest value\r\n     */\r\n    setLayerTime(theTime: number): boolean{\r\n\r\n        this._currentTime = theTime;\r\n\r\n        let newIndex;\r\n\r\n        if (theTime < this.localTimes[0]){\r\n            return false;\r\n        } else if (theTime > this.localTimes[this.localTimes.length - 1]){\r\n            newIndex = this.localTimes.length - 1;\r\n        }\r\n\r\n        for (let i = 0; i < this.localTimes.length; i++){\r\n            if (this.localTimes[i] >= theTime){\r\n                newIndex = i;\r\n                break;\r\n            }\r\n        }\r\n\r\n        if (newIndex == this._currentIndex){\r\n            return false;\r\n        } else {\r\n            this._currentIndex = newIndex;\r\n            mapPopup.closePopup();\r\n\r\n            return true;\r\n        }\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimate = RealEarthAnimate;\r\nexport default RealEarthAnimate;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/mixin/RealEarthAnimateTile.js b/dist/mixin/RealEarthAnimateTile.js
index c3cdd9b..1b37269 100644
--- a/dist/mixin/RealEarthAnimateTile.js
+++ b/dist/mixin/RealEarthAnimateTile.js
@@ -1,57 +1,42 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/4/2015.
  */
-var RealEarthAnimate_1 = require("./RealEarthAnimate");
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('mixin');
+const RealEarthAnimate_1 = require("./RealEarthAnimate");
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('mixin');
 /**
  * Animate real earth tile
  * @augments RealEarthAnimate
  */
-var RealEarthAnimateTile = /** @class */ (function (_super) {
-    __extends(RealEarthAnimateTile, _super);
-    function RealEarthAnimateTile(layer, loadCallback) {
-        var _this = _super.call(this, layer, loadCallback) || this;
-        _this._source = layer.source;
-        _this._olLayer = layer.olLayer;
-        return _this;
+class RealEarthAnimateTile extends RealEarthAnimate_1.default {
+    constructor(layer, loadCallback) {
+        super(layer, loadCallback);
+        this._source = layer.source;
+        this._olLayer = layer.olLayer;
     }
-    RealEarthAnimateTile.prototype.timeInit = function () {
-        _super.prototype.timeInit.call(this);
+    timeInit() {
+        super.timeInit();
         this._sourceUrls = [];
-    };
-    RealEarthAnimateTile.prototype._loadDates = function (inString) {
-        var rawDte = _super.prototype._loadDates.call(this, inString);
-        var dteProductUrl = "http://realearth.ssec.wisc.edu/api/image?products=" + this._products + "_" + rawDte + "&x={x}&y={y}&z={z}";
+    }
+    _loadDates(inString) {
+        let rawDte = super._loadDates(inString);
+        let dteProductUrl = `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;
         this._sourceUrls.push(dteProductUrl);
         return '';
-    };
+    }
     /**
      * @protected
      */
-    RealEarthAnimateTile.prototype._loadLatest = function () {
-        if (_super.prototype._loadLatest.call(this)) {
+    _loadLatest() {
+        if (super._loadLatest()) {
             this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
         }
         return true;
-    };
-    RealEarthAnimateTile.prototype.setLayerTime = function (theTime) {
-        if (_super.prototype.setLayerTime.call(this, theTime)) {
+    }
+    setLayerTime(theTime) {
+        if (super.setLayerTime(theTime)) {
             if (this._olLayer.getZIndex() < 0) {
                 this._olLayer.setZIndex(0);
             }
@@ -61,9 +46,8 @@ var RealEarthAnimateTile = /** @class */ (function (_super) {
             this._olLayer.setZIndex(-1);
         }
         return true;
-    };
-    return RealEarthAnimateTile;
-}(RealEarthAnimate_1.default));
+    }
+}
 nm.RealEarthAnimateTile = RealEarthAnimateTile;
 exports.default = RealEarthAnimateTile;
 //# sourceMappingURL=RealEarthAnimateTile.js.map
\ No newline at end of file
diff --git a/dist/mixin/RealEarthAnimateTile.js.map b/dist/mixin/RealEarthAnimateTile.js.map
index 34690f9..434f288 100644
--- a/dist/mixin/RealEarthAnimateTile.js.map
+++ b/dist/mixin/RealEarthAnimateTile.js.map
@@ -1 +1 @@
-{"version":3,"file":"RealEarthAnimateTile.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimateTile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;GAEG;AACH,uDAAkD;AAClD,2CAAsC;AAEtC,IAAM,EAAE,GAAG,iBAAO,CAAC,OAAO,CAAC,CAAC;AAI5B;;;GAGG;AACH;IAAmC,wCAAgB;IAK/C,8BAAY,KAAyB,EAAE,YAAgD;QAAvF,YACI,kBAAM,KAAK,EAAE,YAAY,CAAC,SAG7B;QAFG,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;;IAClC,CAAC;IAID,uCAAQ,GAAR;QACI,iBAAM,QAAQ,WAAE,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,yCAAU,GAAV,UAAW,QAAgB;QACvB,IAAI,MAAM,GAAG,iBAAM,UAAU,YAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,aAAa,GACb,uDAAqD,IAAI,CAAC,SAAS,SAAI,MAAM,uBAAoB,CAAC;QACtG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,0CAAW,GAAX;QACI,IAAI,iBAAM,WAAW,WAAE,EAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2CAAY,GAAZ,UAAa,OAAe;QACxB,IAAI,iBAAM,YAAY,YAAC,OAAO,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EAAC;gBAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC9B;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SAC7D;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACL,2BAAC;AAAD,CAAC,AA/CD,CAAmC,0BAAgB,GA+ClD;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAC/C,kBAAe,oBAAoB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport RealEarthAnimate from './RealEarthAnimate';\r\nimport provide from '../util/provide';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nconst nm = provide('mixin');\r\nimport XYZ from 'ol/source/XYZ';\r\nimport Tile from 'ol/layer/Tile';\r\n\r\n/**\r\n * Animate real earth tile\r\n * @augments RealEarthAnimate\r\n */\r\nclass RealEarthAnimateTile extends RealEarthAnimate {\r\n    _sourceUrls: string[];\r\n    _source: XYZ;\r\n    _olLayer: Tile;\r\n\r\n    constructor(layer: LayerRealEarthTile, loadCallback?: (lyr: LayerRealEarthTile) => void){\r\n        super(layer, loadCallback);\r\n        this._source = layer.source;\r\n        this._olLayer = layer.olLayer;\r\n    }\r\n\r\n\r\n\r\n    timeInit() {\r\n        super.timeInit();\r\n        this._sourceUrls = [];\r\n    }\r\n\r\n    _loadDates(inString: string): string {\r\n        let rawDte = super._loadDates(inString);\r\n        let dteProductUrl =\r\n            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;\r\n        this._sourceUrls.push(dteProductUrl);\r\n        return '';\r\n    }\r\n\r\n    /**\r\n     * @protected\r\n     */\r\n    _loadLatest(): boolean {\r\n        if (super._loadLatest()){\r\n            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (super.setLayerTime(theTime)) {\r\n            if (this._olLayer.getZIndex() < 0){\r\n                this._olLayer.setZIndex(0);\r\n            }\r\n            this._source.setUrl(this._sourceUrls[this._currentIndex]);\r\n        } else {\r\n            this._olLayer.setZIndex(-1);\r\n        }\r\n        return true;\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimateTile = RealEarthAnimateTile;\r\nexport default RealEarthAnimateTile;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"RealEarthAnimateTile.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimateTile.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,yDAAkD;AAClD,6CAAsC;AAEtC,MAAM,EAAE,GAAG,iBAAO,CAAC,OAAO,CAAC,CAAC;AAI5B;;;GAGG;AACH,MAAM,oBAAqB,SAAQ,0BAAgB;IAK/C,YAAY,KAAyB,EAAE,YAAgD;QACnF,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;IAClC,CAAC;IAID,QAAQ;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,UAAU,CAAC,QAAgB;QACvB,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,aAAa,GACb,qDAAqD,IAAI,CAAC,SAAS,IAAI,MAAM,oBAAoB,CAAC;QACtG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,WAAW;QACP,IAAI,KAAK,CAAC,WAAW,EAAE,EAAC;YACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,OAAe;QACxB,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EAAC;gBAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC9B;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SAC7D;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAC/C,kBAAe,oBAAoB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport RealEarthAnimate from './RealEarthAnimate';\r\nimport provide from '../util/provide';\r\nimport LayerRealEarthTile from \"../layers/LayerRealEarthTile\";\r\nconst nm = provide('mixin');\r\nimport XYZ from 'ol/source/XYZ';\r\nimport Tile from 'ol/layer/Tile';\r\n\r\n/**\r\n * Animate real earth tile\r\n * @augments RealEarthAnimate\r\n */\r\nclass RealEarthAnimateTile extends RealEarthAnimate {\r\n    _sourceUrls: string[];\r\n    _source: XYZ;\r\n    _olLayer: Tile;\r\n\r\n    constructor(layer: LayerRealEarthTile, loadCallback?: (lyr: LayerRealEarthTile) => void){\r\n        super(layer, loadCallback);\r\n        this._source = layer.source;\r\n        this._olLayer = layer.olLayer;\r\n    }\r\n\r\n\r\n\r\n    timeInit() {\r\n        super.timeInit();\r\n        this._sourceUrls = [];\r\n    }\r\n\r\n    _loadDates(inString: string): string {\r\n        let rawDte = super._loadDates(inString);\r\n        let dteProductUrl =\r\n            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;\r\n        this._sourceUrls.push(dteProductUrl);\r\n        return '';\r\n    }\r\n\r\n    /**\r\n     * @protected\r\n     */\r\n    _loadLatest(): boolean {\r\n        if (super._loadLatest()){\r\n            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (super.setLayerTime(theTime)) {\r\n            if (this._olLayer.getZIndex() < 0){\r\n                this._olLayer.setZIndex(0);\r\n            }\r\n            this._source.setUrl(this._sourceUrls[this._currentIndex]);\r\n        } else {\r\n            this._olLayer.setZIndex(-1);\r\n        }\r\n        return true;\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimateTile = RealEarthAnimateTile;\r\nexport default RealEarthAnimateTile;\r\n"]}
\ No newline at end of file
diff --git a/dist/mixin/RealEarthAnimateVector.js b/dist/mixin/RealEarthAnimateVector.js
index 42bf2fc..4bca21b 100644
--- a/dist/mixin/RealEarthAnimateVector.js
+++ b/dist/mixin/RealEarthAnimateVector.js
@@ -1,66 +1,51 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/4/2015.
  */
-var RealEarthAnimate_1 = require("./RealEarthAnimate");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var nm = provide_1.default('mixin');
+const RealEarthAnimate_1 = require("./RealEarthAnimate");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const nm = provide_1.default('mixin');
 /**
  * class mixin to animate RealEarth vector layers
  * @augments RealEarthAnimate
  */
-var RealEarthAnimateVector = /** @class */ (function (_super) {
-    __extends(RealEarthAnimateVector, _super);
-    function RealEarthAnimateVector(layer, loadCallback) {
-        var _this = _super.call(this, layer, loadCallback) || this;
-        _this._source = layer.source;
-        _this._olLayer = layer.olLayer;
-        _this._lyr = layer;
-        return _this;
+class RealEarthAnimateVector extends RealEarthAnimate_1.default {
+    constructor(layer, loadCallback) {
+        super(layer, loadCallback);
+        this._source = layer.source;
+        this._olLayer = layer.olLayer;
+        this._lyr = layer;
     }
     /**
      * Call this after the mixin has been applied
      */
-    RealEarthAnimateVector.prototype.timeInit = function () {
-        _super.prototype.timeInit.call(this);
+    timeInit() {
+        super.timeInit();
         this._rawTimesLookup = {};
         this._dataCache = [];
-    };
+    }
     /**
      * Given the raw time string, add to the arrays to keep track of dates and cache
      * @param {string} inString - input date string
      * @protected
      */
-    RealEarthAnimateVector.prototype._loadDates = function (inString) {
-        var rawDte = _super.prototype._loadDates.call(this, inString);
+    _loadDates(inString) {
+        let rawDte = super._loadDates(inString);
         this._dataCache.push(null);
         this._rawTimesLookup[rawDte] = null;
         return '';
-    };
+    }
     /**
      * @protected
      */
-    RealEarthAnimateVector.prototype._loadLatest = function () {
-        if (_super.prototype._loadLatest.call(this)) {
+    _loadLatest() {
+        if (super._loadLatest()) {
             this._loadAtTimeIndex.call(this, this._currentIndex);
         }
         return true;
-    };
+    }
     //
     //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4
     //
@@ -72,44 +57,42 @@ var RealEarthAnimateVector = /** @class */ (function (_super) {
      * @param {boolean} [setAsSource=true] set to false to trigger cache load only
      * @private
      */
-    RealEarthAnimateVector.prototype._loadAtTimeIndex = function (i, setAsSource) {
-        if (setAsSource === void 0) { setAsSource = true; }
+    _loadAtTimeIndex(i, setAsSource = true) {
         setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
         if (this._dataCache[i] != null) {
             this._source.clear();
             this._loadFeatures(this._dataCache[i]);
         }
         else {
-            var __this_1 = this;
-            $.get('http://realearth.ssec.wisc.edu:80/api/shapes', { products: this._products + "_" + this._rawDateStrings[i] }, function (d) {
-                __this_1._dataCache[i] = d;
-                __this_1._rawTimesLookup[__this_1._rawDateStrings[i]] = d;
+            let __this = this;
+            $.get('http://realearth.ssec.wisc.edu:80/api/shapes', { products: `${this._products}_${this._rawDateStrings[i]}` }, function (d) {
+                __this._dataCache[i] = d;
+                __this._rawTimesLookup[__this._rawDateStrings[i]] = d;
                 if (setAsSource) {
-                    __this_1._source.clear();
-                    __this_1._loadFeatures.call(__this_1, __this_1._dataCache[i]);
+                    __this._source.clear();
+                    __this._loadFeatures.call(__this, __this._dataCache[i]);
                 }
             }, 'json');
         }
-    };
+    }
     /**
      * helper to load the features at the index specified
      * @param {object} geojObj - the geojson object
      * @private
      */
-    RealEarthAnimateVector.prototype._loadFeatures = function (geojObj) {
+    _loadFeatures(geojObj) {
         this._source.addFeatures(this._lyr._geoJsonFormat.readFeatures(geojObj, { featureProjection: this._lyr._transform.featureProjection, dataProjection: this._lyr._transform.dataProjection }));
-    };
-    RealEarthAnimateVector.prototype.setLayerTime = function (theTime) {
-        if (_super.prototype.setLayerTime.call(this, theTime)) {
+    }
+    setLayerTime(theTime) {
+        if (super.setLayerTime(theTime)) {
             this._loadAtTimeIndex(this._currentIndex);
         }
         else {
             this._source.clear();
         }
         return true;
-    };
-    return RealEarthAnimateVector;
-}(RealEarthAnimate_1.default));
+    }
+}
 nm.RealEarthAnimateVector = RealEarthAnimateVector;
 exports.default = RealEarthAnimateVector;
 //# sourceMappingURL=RealEarthAnimateVector.js.map
\ No newline at end of file
diff --git a/dist/mixin/RealEarthAnimateVector.js.map b/dist/mixin/RealEarthAnimateVector.js.map
index 92a5000..6d27499 100644
--- a/dist/mixin/RealEarthAnimateVector.js.map
+++ b/dist/mixin/RealEarthAnimateVector.js.map
@@ -1 +1 @@
-{"version":3,"file":"RealEarthAnimateVector.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimateVector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport RealEarthAnimate from './RealEarthAnimate';\r\nimport provide from '../util/provide';\r\nimport {LayerVectorRealEarth} from \"../layers/LayerRealEarthVector\";\r\nimport $ = require('jquery');\r\nconst nm = provide('mixin');\r\nimport VectorSource from 'ol/source/Vector';\r\nimport VectorLayer from 'ol/layer/Vector';\r\n\r\n\r\n/**\r\n * class mixin to animate RealEarth vector layers\r\n * @augments RealEarthAnimate\r\n */\r\nclass RealEarthAnimateVector extends RealEarthAnimate {\r\n    _dataCache: Array<Array<Object>|Object>;\r\n    _source: VectorSource;\r\n    _rawTimesLookup: {[s: string]: any};\r\n    _currentIndex: number;\r\n    _olLayer: VectorLayer;\r\n    _lyr: LayerVectorRealEarth;\r\n\r\n    constructor(layer: LayerVectorRealEarth, loadCallback?: (lyr: LayerVectorRealEarth) => void){\r\n        super(layer, loadCallback);\r\n        this._source = layer.source;\r\n        this._olLayer = layer.olLayer;\r\n        this._lyr = layer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    timeInit() {\r\n        super.timeInit();\r\n        this._rawTimesLookup = {};\r\n        this._dataCache = [];\r\n    }\r\n\r\n    /**\r\n     * Given the raw time string, add to the arrays to keep track of dates and cache\r\n     * @param {string} inString - input date string\r\n     * @protected\r\n     */\r\n    _loadDates(inString: string): string {\r\n        let rawDte = super._loadDates(inString);\r\n        this._dataCache.push(null);\r\n        this._rawTimesLookup[rawDte] = null;\r\n        return '';\r\n    }\r\n\r\n    /**\r\n     * @protected\r\n     */\r\n    _loadLatest(): boolean {\r\n        if (super._loadLatest()) {\r\n            this._loadAtTimeIndex.call(this, this._currentIndex);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    //\r\n    //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4\r\n    //\r\n    //    20160108.205500\r\n    //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&x=34&y=46&z=7\r\n\r\n    /**\r\n     * Load the features at the date index specified\r\n     * @param {number} i the index of the features to be loaded by date\r\n     * @param {boolean} [setAsSource=true] set to false to trigger cache load only\r\n     * @private\r\n     */\r\n    _loadAtTimeIndex(i: number, setAsSource = true) {\r\n        setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;\r\n        if (this._dataCache[i] != null) {\r\n            this._source.clear();\r\n            this._loadFeatures(this._dataCache[i]);\r\n        } else {\r\n            let __this = this;\r\n            $.get('http://realearth.ssec.wisc.edu:80/api/shapes',\r\n                {products: `${this._products}_${this._rawDateStrings[i]}`},\r\n                function (d) {\r\n                    __this._dataCache[i] = d;\r\n                    __this._rawTimesLookup[__this._rawDateStrings[i]] = d;\r\n                    if (setAsSource) {\r\n                        __this._source.clear();\r\n                        __this._loadFeatures.call(__this, __this._dataCache[i]);\r\n                    }\r\n                }, 'json'\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * helper to load the features at the index specified\r\n     * @param {object} geojObj - the geojson object\r\n     * @private\r\n     */\r\n    _loadFeatures(geojObj: Object) {\r\n        this._source.addFeatures(this._lyr._geoJsonFormat.readFeatures(geojObj,\r\n            {featureProjection: this._lyr._transform.featureProjection, dataProjection: this._lyr._transform.dataProjection}));\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (super.setLayerTime(theTime)) {\r\n            this._loadAtTimeIndex(this._currentIndex);\r\n        } else {\r\n            this._source.clear();\r\n        }\r\n        return true;\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimateVector = RealEarthAnimateVector;\r\nexport default RealEarthAnimateVector;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"RealEarthAnimateVector.js","sourceRoot":"","sources":["../../src/mixin/RealEarthAnimateVector.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/4/2015.\r\n */\r\nimport RealEarthAnimate from './RealEarthAnimate';\r\nimport provide from '../util/provide';\r\nimport {LayerVectorRealEarth} from \"../layers/LayerRealEarthVector\";\r\nimport $ = require('jquery');\r\nconst nm = provide('mixin');\r\nimport VectorSource from 'ol/source/Vector';\r\nimport VectorLayer from 'ol/layer/Vector';\r\n\r\n\r\n/**\r\n * class mixin to animate RealEarth vector layers\r\n * @augments RealEarthAnimate\r\n */\r\nclass RealEarthAnimateVector extends RealEarthAnimate {\r\n    _dataCache: Array<Array<Object>|Object>;\r\n    _source: VectorSource;\r\n    _rawTimesLookup: {[s: string]: any};\r\n    _currentIndex: number;\r\n    _olLayer: VectorLayer;\r\n    _lyr: LayerVectorRealEarth;\r\n\r\n    constructor(layer: LayerVectorRealEarth, loadCallback?: (lyr: LayerVectorRealEarth) => void){\r\n        super(layer, loadCallback);\r\n        this._source = layer.source;\r\n        this._olLayer = layer.olLayer;\r\n        this._lyr = layer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Call this after the mixin has been applied\r\n     */\r\n    timeInit() {\r\n        super.timeInit();\r\n        this._rawTimesLookup = {};\r\n        this._dataCache = [];\r\n    }\r\n\r\n    /**\r\n     * Given the raw time string, add to the arrays to keep track of dates and cache\r\n     * @param {string} inString - input date string\r\n     * @protected\r\n     */\r\n    _loadDates(inString: string): string {\r\n        let rawDte = super._loadDates(inString);\r\n        this._dataCache.push(null);\r\n        this._rawTimesLookup[rawDte] = null;\r\n        return '';\r\n    }\r\n\r\n    /**\r\n     * @protected\r\n     */\r\n    _loadLatest(): boolean {\r\n        if (super._loadLatest()) {\r\n            this._loadAtTimeIndex.call(this, this._currentIndex);\r\n        }\r\n        return true;\r\n    }\r\n\r\n    //\r\n    //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4\r\n    //\r\n    //    20160108.205500\r\n    //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&x=34&y=46&z=7\r\n\r\n    /**\r\n     * Load the features at the date index specified\r\n     * @param {number} i the index of the features to be loaded by date\r\n     * @param {boolean} [setAsSource=true] set to false to trigger cache load only\r\n     * @private\r\n     */\r\n    _loadAtTimeIndex(i: number, setAsSource = true) {\r\n        setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;\r\n        if (this._dataCache[i] != null) {\r\n            this._source.clear();\r\n            this._loadFeatures(this._dataCache[i]);\r\n        } else {\r\n            let __this = this;\r\n            $.get('http://realearth.ssec.wisc.edu:80/api/shapes',\r\n                {products: `${this._products}_${this._rawDateStrings[i]}`},\r\n                function (d) {\r\n                    __this._dataCache[i] = d;\r\n                    __this._rawTimesLookup[__this._rawDateStrings[i]] = d;\r\n                    if (setAsSource) {\r\n                        __this._source.clear();\r\n                        __this._loadFeatures.call(__this, __this._dataCache[i]);\r\n                    }\r\n                }, 'json'\r\n            );\r\n        }\r\n    }\r\n\r\n    /**\r\n     * helper to load the features at the index specified\r\n     * @param {object} geojObj - the geojson object\r\n     * @private\r\n     */\r\n    _loadFeatures(geojObj: Object) {\r\n        this._source.addFeatures(this._lyr._geoJsonFormat.readFeatures(geojObj,\r\n            {featureProjection: this._lyr._transform.featureProjection, dataProjection: this._lyr._transform.dataProjection}));\r\n    }\r\n\r\n    setLayerTime(theTime: number): boolean {\r\n        if (super.setLayerTime(theTime)) {\r\n            this._loadAtTimeIndex(this._currentIndex);\r\n        } else {\r\n            this._source.clear();\r\n        }\r\n        return true;\r\n    }\r\n}\r\n\r\nnm.RealEarthAnimateVector = RealEarthAnimateVector;\r\nexport default RealEarthAnimateVector;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/esriToOlStyle.js b/dist/olHelpers/esriToOlStyle.js
index d651684..cc3fbc1 100644
--- a/dist/olHelpers/esriToOlStyle.js
+++ b/dist/olHelpers/esriToOlStyle.js
@@ -1,28 +1,15 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 1/4/2016.
  */
-var provide_1 = require("../util/provide");
-var Style_1 = require("ol/style/Style");
-var Circle_1 = require("ol/style/Circle");
-var Stroke_1 = require("ol/style/Stroke");
-var Fill_1 = require("ol/style/Fill");
-var Icon_1 = require("ol/style/Icon");
-var nm = provide_1.default('olHelpers.esriToOlStyle');
+const provide_1 = require("../util/provide");
+const Style_1 = require("ol/style/Style");
+const Circle_1 = require("ol/style/Circle");
+const Stroke_1 = require("ol/style/Stroke");
+const Fill_1 = require("ol/style/Fill");
+const Icon_1 = require("ol/style/Icon");
+const nm = provide_1.default('olHelpers.esriToOlStyle');
 /**
  *
  * @param {Array<number>} colorArray - input color array
@@ -31,7 +18,7 @@ var nm = provide_1.default('olHelpers.esriToOlStyle');
  * @private
  */
 function _colorArrayToRgba(colorArray, opacity) {
-    return "rgba(" + colorArray[0] + "," + colorArray[1] + "," + colorArray[2] + "," + opacity + ")";
+    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;
 }
 /**
  * escape html charcters
@@ -47,31 +34,29 @@ function htmlEscape(str) {
         .replace(/>/g, '&gt;');
 }
 nm.htmlEscape = htmlEscape;
-var CommonSymbol = /** @class */ (function () {
+class CommonSymbol {
     /**
      *
      * @param symbolObj
      * @param {number} opacity
      */
-    function CommonSymbol(symbolObj, opacity) {
+    constructor(symbolObj, opacity) {
         this.symbolObj = symbolObj;
         this.opacity = opacity;
         this.olStyle = undefined;
         this.legendHtml = '';
     }
-    return CommonSymbol;
-}());
-var PointSymbol = /** @class */ (function (_super) {
-    __extends(PointSymbol, _super);
-    function PointSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
+}
+class PointSymbol extends CommonSymbol {
+    constructor(symbolObj, opacity) {
+        super(symbolObj, opacity);
+        switch (this.symbolObj.type) {
             case 'esriSMS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                var radius = _this.symbolObj.size;
-                _this.olStyle = new Style_1.default({
+                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                let outlineWidth = this.symbolObj.outline.width;
+                let radius = this.symbolObj.size;
+                this.olStyle = new Style_1.default({
                     image: new Circle_1.default({
                         radius: radius,
                         fill: new Fill_1.default({
@@ -80,65 +65,59 @@ var PointSymbol = /** @class */ (function (_super) {
                         stroke: new Stroke_1.default({ color: outerColor, width: outlineWidth })
                     })
                 });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" style=\"color: " + innerColor + "\">&#9679;</span>";
+                this.legendHtml = `<span class="legend-layer-icon" style="color: ${innerColor}">&#9679;</span>`;
                 break;
             case 'esriPMS':
-                _this.olStyle = new Style_1.default({
-                    image: new Icon_1.default({ src: "data:image/png;base64," + _this.symbolObj['imageData'] })
+                this.olStyle = new Style_1.default({
+                    image: new Icon_1.default({ src: `data:image/png;base64,${this.symbolObj['imageData']}` })
                 });
-                _this.legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + _this.symbolObj['imageData'] + "\">";
+                this.legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${this.symbolObj['imageData']}">`;
                 break;
             default:
-                console.log(_this.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + _this.symbolObj['type']);
+                console.log(this.symbolObj);
+                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
         }
-        return _this;
     }
-    return PointSymbol;
-}(CommonSymbol));
-var LineSymbol = /** @class */ (function (_super) {
-    __extends(LineSymbol, _super);
-    function LineSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj.type) {
+}
+class LineSymbol extends CommonSymbol {
+    constructor(symbolObj, opacity) {
+        super(symbolObj, opacity);
+        switch (this.symbolObj.type) {
             case 'esriSLS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var lineWidth = _this.symbolObj.width;
-                _this.olStyle = new Style_1.default({
+                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                let lineWidth = this.symbolObj.width;
+                this.olStyle = new Style_1.default({
                     stroke: new Stroke_1.default({
                         color: innerColor,
                         //lineDash: [4],
                         width: lineWidth
                     })
                 });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 4px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: -1px;";
-                _this.legendHtml += "\"></span>";
+                this.legendHtml = `<span class="legend-layer-icon" `;
+                this.legendHtml += `style="`;
+                this.legendHtml += `background-color: ${innerColor};`;
+                this.legendHtml += `width: 40px;`;
+                this.legendHtml += `height: 4px;`;
+                this.legendHtml += `position: relative;`;
+                this.legendHtml += `display: inline-block;`;
+                this.legendHtml += `top: -1px;`;
+                this.legendHtml += `"></span>`;
                 break;
             default:
-                console.log(_this.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + _this.symbolObj['type']);
+                console.log(this.symbolObj);
+                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
         }
-        return _this;
     }
-    return LineSymbol;
-}(CommonSymbol));
-var PolygonSymbol = /** @class */ (function (_super) {
-    __extends(PolygonSymbol, _super);
-    function PolygonSymbol(symbolObj, opacity) {
-        var _this = _super.call(this, symbolObj, opacity) || this;
-        switch (_this.symbolObj['type']) {
+}
+class PolygonSymbol extends CommonSymbol {
+    constructor(symbolObj, opacity) {
+        super(symbolObj, opacity);
+        switch (this.symbolObj['type']) {
             case 'esriSFS':
-                var innerColor = _colorArrayToRgba(_this.symbolObj.color, _this.opacity);
-                var outerColor = _colorArrayToRgba(_this.symbolObj.outline.color, _this.opacity);
-                var outlineWidth = _this.symbolObj.outline.width;
-                _this.olStyle = new Style_1.default({
+                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
+                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
+                let outlineWidth = this.symbolObj.outline.width;
+                this.olStyle = new Style_1.default({
                     stroke: new Stroke_1.default({
                         color: outerColor,
                         //lineDash: [4],
@@ -148,110 +127,99 @@ var PolygonSymbol = /** @class */ (function (_super) {
                         color: innerColor
                     })
                 });
-                _this.legendHtml = "<span class=\"legend-layer-icon\" ";
-                _this.legendHtml += "style=\"";
-                _this.legendHtml += "background-color: " + innerColor + ";";
-                _this.legendHtml += "border: solid " + outerColor + " 1px;";
-                _this.legendHtml += "width: 40px;";
-                _this.legendHtml += "height: 9px;";
-                _this.legendHtml += "position: relative;";
-                _this.legendHtml += "display: inline-block;";
-                _this.legendHtml += "top: 2px;";
-                _this.legendHtml += "\"></span>";
+                this.legendHtml = `<span class="legend-layer-icon" `;
+                this.legendHtml += `style="`;
+                this.legendHtml += `background-color: ${innerColor};`;
+                this.legendHtml += `border: solid ${outerColor} 1px;`;
+                this.legendHtml += `width: 40px;`;
+                this.legendHtml += `height: 9px;`;
+                this.legendHtml += `position: relative;`;
+                this.legendHtml += `display: inline-block;`;
+                this.legendHtml += `top: 2px;`;
+                this.legendHtml += `"></span>`;
                 break;
             default:
-                console.log(_this.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + _this.symbolObj['type']);
+                console.log(this.symbolObj);
+                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
         }
-        return _this;
     }
-    return PolygonSymbol;
-}(CommonSymbol));
-var SymbolGenerator = /** @class */ (function () {
-    function SymbolGenerator(esriResponse) {
+}
+class SymbolGenerator {
+    constructor(esriResponse) {
         this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
         this.renderer = esriResponse.drawingInfo.renderer;
         this.olStyle = undefined;
         this.legendHtml = '';
     }
-    return SymbolGenerator;
-}());
-var SingleSymbol = /** @class */ (function (_super) {
-    __extends(SingleSymbol, _super);
+}
+class SingleSymbol extends SymbolGenerator {
     /**
      *
      * @param {object} esriResponse - layer info
      * @param SymbolClass - the symbol class to use
      */
-    function SingleSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.symbol = _this.renderer.symbol;
-        var symbolObj = new SymbolClass(_this.symbol, _this.opacity);
-        _this.olStyle = symbolObj.olStyle;
-        _this.legendHtml = symbolObj.legendHtml;
-        return _this;
+    constructor(esriResponse, SymbolClass) {
+        super(esriResponse);
+        this.symbol = this.renderer.symbol;
+        let symbolObj = new SymbolClass(this.symbol, this.opacity);
+        this.olStyle = symbolObj.olStyle;
+        this.legendHtml = symbolObj.legendHtml;
     }
-    return SingleSymbol;
-}(SymbolGenerator));
-var UniqueValueSymbol = /** @class */ (function (_super) {
-    __extends(UniqueValueSymbol, _super);
+}
+class UniqueValueSymbol extends SymbolGenerator {
     /**
      *
      * @param {object} esriResponse - layer info
      * @param SymbolClass - the Symbol class definition
      */
-    function UniqueValueSymbol(esriResponse, SymbolClass) {
-        var _this = _super.call(this, esriResponse) || this;
-        _this.uniqueValueInfos = _this.renderer.uniqueValueInfos;
-        _this.propertyName = _this.renderer.field1;
-        _this.defaultSymbol = _this.renderer.defaultSymbol;
-        if (_this.defaultSymbol) {
-            var symbolObj = new SymbolClass(_this.defaultSymbol, _this.opacity);
-            _this.defaultStyle = symbolObj.olStyle;
-            _this.defaultLabelHtml = "<span class=\"legend-layer-subitem\">" + htmlEscape(_this.renderer['defaultLabel']) + "</span>" + symbolObj.legendHtml;
+    constructor(esriResponse, SymbolClass) {
+        super(esriResponse);
+        this.uniqueValueInfos = this.renderer.uniqueValueInfos;
+        this.propertyName = this.renderer.field1;
+        this.defaultSymbol = this.renderer.defaultSymbol;
+        if (this.defaultSymbol) {
+            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
+            this.defaultStyle = symbolObj.olStyle;
+            this.defaultLabelHtml = `<span class="legend-layer-subitem">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;
         }
         else {
-            _this.defaultStyle = undefined;
-            _this.defaultLabelHtml = 'other';
+            this.defaultStyle = undefined;
+            this.defaultLabelHtml = 'other';
         }
-        _this.valueArray = [];
-        _this.labelArray = [];
-        _this.legendArray = [];
-        _this.propertyStyleLookup = {};
-        for (var _i = 0, _a = _this.uniqueValueInfos; _i < _a.length; _i++) {
-            var uniqueVal = _a[_i];
-            _this.labelArray.push(uniqueVal['label']);
-            _this.valueArray.push(uniqueVal['value']);
-            var uniqueSym = new SymbolClass(uniqueVal.symbol, _this.opacity);
-            _this.legendArray.push("<span class=\"legend-layer-subitem\">" + htmlEscape(uniqueVal['label']) + "</span>" + uniqueSym.legendHtml);
-            _this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
+        this.valueArray = [];
+        this.labelArray = [];
+        this.legendArray = [];
+        this.propertyStyleLookup = {};
+        for (let uniqueVal of this.uniqueValueInfos) {
+            this.labelArray.push(uniqueVal['label']);
+            this.valueArray.push(uniqueVal['value']);
+            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
+            this.legendArray.push(`<span class="legend-layer-subitem">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);
+            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
         }
-        _this.olStyle = function (feature) {
-            var checkProperties = feature.getProperties();
-            var checkProperty = checkProperties[_this.propertyName];
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                return [_this.propertyStyleLookup[checkProperty]];
+        this.olStyle = (feature) => {
+            let checkProperties = feature.getProperties();
+            let checkProperty = checkProperties[this.propertyName];
+            if (this.propertyStyleLookup[checkProperty] !== undefined) {
+                return [this.propertyStyleLookup[checkProperty]];
             }
             else {
-                return [_this.defaultStyle];
+                return [this.defaultStyle];
             }
         };
-        if (_this.defaultLabelHtml !== null) {
-            _this.legendArray.push(_this.defaultLabelHtml);
+        if (this.defaultLabelHtml !== null) {
+            this.legendArray.push(this.defaultLabelHtml);
         }
-        _this.legendHtml = '<ul>';
-        for (var _b = 0, _c = _this.legendArray; _b < _c.length; _b++) {
-            var h = _c[_b];
-            _this.legendHtml += "<li>" + h + "</li>";
+        this.legendHtml = '<ul>';
+        for (let h of this.legendArray) {
+            this.legendHtml += `<li>${h}</li>`;
         }
-        _this.legendHtml += '</ul>';
-        return _this;
+        this.legendHtml += '</ul>';
     }
-    return UniqueValueSymbol;
-}(SymbolGenerator));
+}
 function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    var renderer = esriResponse.drawingInfo.renderer;
-    var symbolLegendOut = null;
+    let renderer = esriResponse.drawingInfo.renderer;
+    let symbolLegendOut = null;
     switch (renderer.type) {
         case 'simple':
             switch (esriResponse.geometryType) {
@@ -303,33 +271,32 @@ nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
  * @param {boolean} [skipLayerNameAndExpander=false] use only icons
  * @returns {string} legend html
  */
-function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
-    if (skipLayerNameAndExpander === void 0) { skipLayerNameAndExpander = false; }
+function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander = false) {
     skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;
-    var layerName = lyrObject['layerName'];
-    var legendItems = lyrObject['legend'];
-    var legendHtml = '';
+    let layerName = lyrObject['layerName'];
+    let legendItems = lyrObject['legend'];
+    let legendHtml = '';
     if (!skipLayerNameAndExpander) {
-        legendHtml += "<span class=\"legend-layer-subitem\">" + layerName + "</span>";
+        legendHtml += `<span class="legend-layer-subitem">${layerName}</span>`;
     }
     if (legendItems.length == 1) {
-        legendHtml = "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[0]['imageData'] + "\">";
+        legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[0]['imageData']}">`;
     }
     else {
         if (!skipLayerNameAndExpander) {
             legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>';
         }
         legendHtml += '<ul>';
-        for (var i = 0; i < legendItems.length; i++) {
-            legendHtml += "<li>";
-            legendHtml += "<span class=\"legend-layer-subitem\">" + htmlEscape(legendItems[i]['label']) + "</span>";
-            legendHtml += "<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64," + legendItems[i]['imageData'] + "\">";
-            legendHtml += "</li>";
+        for (let i = 0; i < legendItems.length; i++) {
+            legendHtml += `<li>`;
+            legendHtml += `<span class="legend-layer-subitem">${htmlEscape(legendItems[i]['label'])}</span>`;
+            legendHtml += `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[i]['imageData']}">`;
+            legendHtml += `</li>`;
         }
         legendHtml += '</ul>';
     }
     if (!skipLayerNameAndExpander) {
-        legendHtml = "<span class=\"legend-layer-subitem\">" + layerName + "</span>" + legendHtml;
+        legendHtml = `<span class="legend-layer-subitem">${layerName}</span>` + legendHtml;
     }
     return legendHtml;
 }
@@ -339,16 +306,15 @@ function mapServiceLegendItem(lyrObject, skipLayerNameAndExpander) {
  * @param  showLayers - limited number of layers to show in map service
  * @returns {string} legend content
  */
-function makeMapServiceLegend(esriResponse, showLayers) {
-    if (showLayers === void 0) { showLayers = []; }
-    var newLegendHtml = '';
-    var layers = esriResponse['layers'];
+function makeMapServiceLegend(esriResponse, showLayers = []) {
+    let newLegendHtml = '';
+    let layers = esriResponse['layers'];
     if (layers.length == 1) {
         newLegendHtml += mapServiceLegendItem(layers[0], true);
     }
     else {
         newLegendHtml += '<ul>';
-        for (var i = 0; i < layers.length; i++) {
+        for (let i = 0; i < layers.length; i++) {
             if (showLayers.length > 0 && showLayers.indexOf(i) < 0) {
                 continue;
             }
diff --git a/dist/olHelpers/esriToOlStyle.js.map b/dist/olHelpers/esriToOlStyle.js.map
index f8f7cc2..5589bff 100644
--- a/dist/olHelpers/esriToOlStyle.js.map
+++ b/dist/olHelpers/esriToOlStyle.js.map
@@ -1 +1 @@
-{"version":3,"file":"esriToOlStyle.js","sourceRoot":"","sources":["../../src/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport Style from 'ol/style/Style';\r\nimport Circle from 'ol/style/Circle';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Icon from \"ol/style/Icon\";\r\nimport Feature from 'ol/Feature'\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray: [number, number, number], opacity: number): string {\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str: string): string {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface iEsriResponse{\r\n    drawingInfo: {\r\n        renderer: iEsriRenderer;\r\n        transparency: number\r\n    },\r\n    geometryType: string\r\n}\r\n\r\n\r\nexport interface iEsriRenderer{\r\n    type: string;\r\n    symbol: iEsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: iEsriSymbol}>;\r\n    field1: string;\r\n    defaultSymbol: iEsriSymbol;\r\n    defaultLabel: string;\r\n}\r\n\r\nexport interface iEsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: [number, number, number];\r\n        width: number;\r\n    },\r\n    color: [number, number, number];\r\n    width: number;\r\n    imageData: string\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: iEsriSymbol;\r\n    olStyle: Style;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n    new (symbolObj: iEsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new Style({\r\n                    image: new Circle({\r\n                        radius: radius,\r\n                        fill: new Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new Style({\r\n                    image: new Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new Style({\r\n                    stroke: new Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new Style({\r\n                    stroke: new Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nexport interface iStyleFunc{\r\n    (f: Feature): Style| Style[]\r\n}\r\n\r\nclass SymbolGenerator {\r\n    opacity: number;\r\n    renderer: iEsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: iStyleFunc | Style;\r\n\r\n    constructor(esriResponse: iEsriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse.drawingInfo.renderer;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    symbol: iEsriSymbol;\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse: iEsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer.symbol;\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n    propertyName: string;\r\n    defaultSymbol: iEsriSymbol;\r\n    defaultStyle: Style;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: {[s: string]: Style};\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: iEsriSymbol}>;\r\n\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse: iEsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer.uniqueValueInfos;\r\n        this.propertyName = this.renderer.field1;\r\n        this.defaultSymbol = this.renderer.defaultSymbol;\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n        this.olStyle = (feature: Feature): Style[] => {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[this.propertyName];\r\n\r\n            if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                return [this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               return [this.defaultStyle];\r\n            }\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: iEsriResponse): {style: iStyleFunc | Style, legend: string} {\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = null;\r\n\r\n    switch (renderer.type) {\r\n        case 'simple':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse.geometryType + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\nexport interface iMapServiceLegend{\r\n    layerName: string;\r\n    legend: {label: string, imageData: string}[]\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject: iMapServiceLegend, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @param  showLayers - limited number of layers to show in map service\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse: {layers: iMapServiceLegend[]}, showLayers: number[] = []) {\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            if (showLayers.length > 0 && showLayers.indexOf(i) < 0){\r\n                continue;\r\n            }\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"esriToOlStyle.js","sourceRoot":"","sources":["../../src/olHelpers/esriToOlStyle.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport Style from 'ol/style/Style';\r\nimport Circle from 'ol/style/Circle';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Icon from \"ol/style/Icon\";\r\nimport Feature from 'ol/Feature'\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray: [number, number, number], opacity: number): string {\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str: string): string {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nexport interface iEsriResponse{\r\n    drawingInfo: {\r\n        renderer: iEsriRenderer;\r\n        transparency: number\r\n    },\r\n    geometryType: string\r\n}\r\n\r\n\r\nexport interface iEsriRenderer{\r\n    type: string;\r\n    symbol: iEsriSymbol;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: iEsriSymbol}>;\r\n    field1: string;\r\n    defaultSymbol: iEsriSymbol;\r\n    defaultLabel: string;\r\n}\r\n\r\nexport interface iEsriSymbol{\r\n    size: number;\r\n    type: string;\r\n    outline:{\r\n        color: [number, number, number];\r\n        width: number;\r\n    },\r\n    color: [number, number, number];\r\n    width: number;\r\n    imageData: string\r\n}\r\n\r\n\r\nclass CommonSymbol {\r\n    legendHtml: string;\r\n    opacity: number;\r\n    symbolObj: iEsriSymbol;\r\n    olStyle: Style;\r\n\r\n    /**\r\n     *\r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\ninterface ICommonSymbol{\r\n    new (symbolObj: iEsriSymbol, opacity: number): CommonSymbol\r\n}\r\n\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new Style({\r\n                    image: new Circle({\r\n                        radius: radius,\r\n                        fill: new Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new Style({\r\n                    image: new Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj.type) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new Style({\r\n                    stroke: new Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj: iEsriSymbol, opacity: number) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new Style({\r\n                    stroke: new Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nexport interface iStyleFunc{\r\n    (f: Feature): Style| Style[]\r\n}\r\n\r\nclass SymbolGenerator {\r\n    opacity: number;\r\n    renderer: iEsriRenderer;\r\n    legendHtml: string;\r\n    olStyle: iStyleFunc | Style;\r\n\r\n    constructor(esriResponse: iEsriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse.drawingInfo.renderer;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    symbol: iEsriSymbol;\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse: iEsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer.symbol;\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n\r\n    propertyName: string;\r\n    defaultSymbol: iEsriSymbol;\r\n    defaultStyle: Style;\r\n    defaultLabelHtml: string;\r\n    labelArray: Array<string>;\r\n    legendArray: Array<string>;\r\n    propertyStyleLookup: {[s: string]: Style};\r\n    valueArray: Array<any>;\r\n    uniqueValueInfos: Array<{label: string, value: any, symbol: iEsriSymbol}>;\r\n\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse: iEsriResponse, SymbolClass: ICommonSymbol) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer.uniqueValueInfos;\r\n        this.propertyName = this.renderer.field1;\r\n        this.defaultSymbol = this.renderer.defaultSymbol;\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n        this.olStyle = (feature: Feature): Style[] => {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[this.propertyName];\r\n\r\n            if (this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                return [this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               return [this.defaultStyle];\r\n            }\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse: iEsriResponse): {style: iStyleFunc | Style, legend: string} {\r\n    let renderer = esriResponse.drawingInfo.renderer;\r\n    let symbolLegendOut: SymbolGenerator = null;\r\n\r\n    switch (renderer.type) {\r\n        case 'simple':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse.geometryType + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse.geometryType) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n\r\nexport interface iMapServiceLegend{\r\n    layerName: string;\r\n    legend: {label: string, imageData: string}[]\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [skipLayerNameAndExpander=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject: iMapServiceLegend, skipLayerNameAndExpander: boolean = false) {\r\n\r\n\r\n    skipLayerNameAndExpander = typeof skipLayerNameAndExpander == 'boolean' ? skipLayerNameAndExpander : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml += `<span class=\"legend-layer-subitem\">${layerName}</span>`;\r\n    }\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        if (!skipLayerNameAndExpander) {\r\n            legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>';\r\n        }\r\n        legendHtml += '<ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!skipLayerNameAndExpander) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @param  showLayers - limited number of layers to show in map service\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse: {layers: iMapServiceLegend[]}, showLayers: number[] = []) {\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            if (showLayers.length > 0 && showLayers.indexOf(i) < 0){\r\n                continue;\r\n            }\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/extentUtil.js b/dist/olHelpers/extentUtil.js
index f84d838..91d1624 100644
--- a/dist/olHelpers/extentUtil.js
+++ b/dist/olHelpers/extentUtil.js
@@ -3,21 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 7/18/2016.
  */
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('util');
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('util');
 function calculateExtent(layers) {
     "use strict";
-    var hasExtent = false;
-    var minX = 10E100;
-    var minY = 10E100;
-    var maxX = -10E100;
-    var maxY = -10E100;
-    for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {
-        var lyr = layers_1[_i];
-        var olLayer = lyr.olLayer || lyr;
+    let hasExtent = false;
+    let minX = 10E100;
+    let minY = 10E100;
+    let maxX = -10E100;
+    let maxY = -10E100;
+    for (let lyr of layers) {
+        let olLayer = lyr.olLayer || lyr;
         if (olLayer.getSource().getFeatures().length > 0) {
             hasExtent = true;
-            var ext = olLayer.getSource().getExtent();
+            let ext = olLayer.getSource().getExtent();
             minX = ext[0] < minX ? ext[0] : minX;
             minY = ext[1] < minY ? ext[1] : minY;
             maxX = ext[2] > maxX ? ext[2] : maxX;
@@ -41,7 +40,7 @@ nm.calculateExtent = calculateExtent;
  */
 function fitToMap(layers, mp, zoomOut) {
     "use strict";
-    var ext = calculateExtent(layers);
+    let ext = calculateExtent(layers);
     if (typeof ext == 'undefined') {
         return;
     }
diff --git a/dist/olHelpers/extentUtil.js.map b/dist/olHelpers/extentUtil.js.map
index 17c4cbe..8d7c73e 100644
--- a/dist/olHelpers/extentUtil.js.map
+++ b/dist/olHelpers/extentUtil.js.map
@@ -1 +1 @@
-{"version":3,"file":"extentUtil.js","sourceRoot":"","sources":["../../src/olHelpers/extentUtil.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,2CAAsC;AAMtC,IAAM,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAE3B,SAAgB,eAAe,CAAC,MAAkC;IAC9D,YAAY,CAAC;IAEb,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IACnB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IAEnB,KAAgB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;QAAnB,IAAI,GAAG,eAAA;QAER,IAAI,OAAO,GAAY,GAAuB,CAAC,OAAO,IAAI,GAAa,CAAC;QAGxE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxC;KACJ;IAED,IAAI,SAAS,EAAE;QACX,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACnC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AA9BD,0CA8BC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,MAAkC,EAAE,EAAO,EAAE,OAAgB;IAClF,YAAY,CAAC;IAEb,IAAI,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,OAAO,GAAG,IAAI,WAAW,EAAC;QAC1B,OAAO;KACV;IAED,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAuC,EAAE,EAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAC,CAAC,CAAC;IAEhF,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAC;QAC3B,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;KAC1D;AACL,CAAC;AAdD,4BAcC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 7/18/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {LayerBaseVector} from \"../layers\";\r\nimport Vector from 'ol/layer/Vector';\r\nimport Map from 'ol/Map';\r\n\r\n\r\nconst nm = provide('util');\r\n\r\nexport function calculateExtent(layers: Vector[]|LayerBaseVector[]):  number[] {\r\n    \"use strict\";\r\n\r\n    let hasExtent = false;\r\n\r\n    let minX = 10E100;\r\n    let minY = 10E100;\r\n    let maxX = -10E100;\r\n    let maxY = -10E100;\r\n\r\n    for (let lyr of layers) {\r\n\r\n        let olLayer: Vector = (lyr as LayerBaseVector).olLayer || lyr as Vector;\r\n        \r\n        \r\n        if (olLayer.getSource().getFeatures().length > 0) {\r\n            hasExtent = true;\r\n            let ext = olLayer.getSource().getExtent();\r\n            minX = ext[0] < minX ? ext[0] : minX;\r\n            minY = ext[1] < minY ? ext[1] : minY;\r\n            maxX = ext[2] > maxX ? ext[2] : maxX;\r\n            maxY = ext[3] > maxY ? ext[3] : maxY;\r\n        }\r\n    }\r\n\r\n    if (hasExtent) {\r\n        return [minX, minY, maxX, maxY];\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nnm.calculateExtent = calculateExtent;\r\n \r\n\r\n/**\r\n * given one or an array of layers, fit to the map\r\n * @param layers - array of layers or single\r\n * @param  mp - the map to fit\r\n * @param [zoomOut=undefined] - levels to zoom out after fit\r\n */\r\nexport function fitToMap(layers: Vector[]|LayerBaseVector[], mp: Map, zoomOut?: number){\r\n    \"use strict\";\r\n\r\n    let ext = calculateExtent(layers);\r\n    \r\n    if (typeof ext == 'undefined'){\r\n        return;\r\n    }\r\n    \r\n    mp.getView().fit(ext as [number, number, number, number], {size: mp.getSize()});\r\n    \r\n    if (typeof zoomOut == 'number'){\r\n        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);\r\n    }\r\n}\r\n\r\nnm.calculateExtent = calculateExtent;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"extentUtil.js","sourceRoot":"","sources":["../../src/olHelpers/extentUtil.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,6CAAsC;AAMtC,MAAM,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAE3B,SAAgB,eAAe,CAAC,MAAkC;IAC9D,YAAY,CAAC;IAEb,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,MAAM,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IACnB,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;IAEnB,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QAEpB,IAAI,OAAO,GAAY,GAAuB,CAAC,OAAO,IAAI,GAAa,CAAC;QAGxE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxC;KACJ;IAED,IAAI,SAAS,EAAE;QACX,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACnC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AA9BD,0CA8BC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,MAAkC,EAAE,EAAO,EAAE,OAAgB;IAClF,YAAY,CAAC;IAEb,IAAI,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,OAAO,GAAG,IAAI,WAAW,EAAC;QAC1B,OAAO;KACV;IAED,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAuC,EAAE,EAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAC,CAAC,CAAC;IAEhF,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAC;QAC3B,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;KAC1D;AACL,CAAC;AAdD,4BAcC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 7/18/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport {LayerBaseVector} from \"../layers\";\r\nimport Vector from 'ol/layer/Vector';\r\nimport Map from 'ol/Map';\r\n\r\n\r\nconst nm = provide('util');\r\n\r\nexport function calculateExtent(layers: Vector[]|LayerBaseVector[]):  number[] {\r\n    \"use strict\";\r\n\r\n    let hasExtent = false;\r\n\r\n    let minX = 10E100;\r\n    let minY = 10E100;\r\n    let maxX = -10E100;\r\n    let maxY = -10E100;\r\n\r\n    for (let lyr of layers) {\r\n\r\n        let olLayer: Vector = (lyr as LayerBaseVector).olLayer || lyr as Vector;\r\n        \r\n        \r\n        if (olLayer.getSource().getFeatures().length > 0) {\r\n            hasExtent = true;\r\n            let ext = olLayer.getSource().getExtent();\r\n            minX = ext[0] < minX ? ext[0] : minX;\r\n            minY = ext[1] < minY ? ext[1] : minY;\r\n            maxX = ext[2] > maxX ? ext[2] : maxX;\r\n            maxY = ext[3] > maxY ? ext[3] : maxY;\r\n        }\r\n    }\r\n\r\n    if (hasExtent) {\r\n        return [minX, minY, maxX, maxY];\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\nnm.calculateExtent = calculateExtent;\r\n \r\n\r\n/**\r\n * given one or an array of layers, fit to the map\r\n * @param layers - array of layers or single\r\n * @param  mp - the map to fit\r\n * @param [zoomOut=undefined] - levels to zoom out after fit\r\n */\r\nexport function fitToMap(layers: Vector[]|LayerBaseVector[], mp: Map, zoomOut?: number){\r\n    \"use strict\";\r\n\r\n    let ext = calculateExtent(layers);\r\n    \r\n    if (typeof ext == 'undefined'){\r\n        return;\r\n    }\r\n    \r\n    mp.getView().fit(ext as [number, number, number, number], {size: mp.getSize()});\r\n    \r\n    if (typeof zoomOut == 'number'){\r\n        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);\r\n    }\r\n}\r\n\r\nnm.calculateExtent = calculateExtent;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/geocode.js b/dist/olHelpers/geocode.js
index 6a0bdc6..0519546 100644
--- a/dist/olHelpers/geocode.js
+++ b/dist/olHelpers/geocode.js
@@ -1,24 +1,23 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var $ = require("jquery");
-var makeGuid_1 = require("../util/makeGuid");
-var projections_1 = require("./projections");
-var Vector_1 = require("ol/layer/Vector");
-var Vector_2 = require("ol/source/Vector");
-var Circle_1 = require("ol/style/Circle");
-var Fill_1 = require("ol/style/Fill");
-var Stroke_1 = require("ol/style/Stroke");
-var Point_1 = require("ol/geom/Point");
-var Feature_1 = require("ol/Feature");
-var invalidClass = 'geocoder-invalid';
-var geocoderLoadingClass = 'geocoder-loading';
-var Style_1 = require("ol/style/Style");
+const $ = require("jquery");
+const makeGuid_1 = require("../util/makeGuid");
+const projections_1 = require("./projections");
+const Vector_1 = require("ol/layer/Vector");
+const Vector_2 = require("ol/source/Vector");
+const Circle_1 = require("ol/style/Circle");
+const Fill_1 = require("ol/style/Fill");
+const Stroke_1 = require("ol/style/Stroke");
+const Point_1 = require("ol/geom/Point");
+const Feature_1 = require("ol/Feature");
+let invalidClass = 'geocoder-invalid';
+let geocoderLoadingClass = 'geocoder-loading';
+const Style_1 = require("ol/style/Style");
 // let testAddress = '65 7th Street, Prairie du Sac, WI';
-var Geocode = /** @class */ (function () {
-    function Geocode(mapDiv, map) {
-        var _this = this;
-        var inputGuid = makeGuid_1.makeGuid();
-        var buttonGuid = makeGuid_1.makeGuid();
+class Geocode {
+    constructor(mapDiv, map) {
+        let inputGuid = makeGuid_1.makeGuid();
+        let buttonGuid = makeGuid_1.makeGuid();
         this.map = map;
         this.indicationLayer = new Vector_1.default({
             source: new Vector_2.default(),
@@ -32,56 +31,55 @@ var Geocode = /** @class */ (function () {
         });
         this.map.addLayer(this.indicationLayer);
         $(mapDiv).append('<div class="geocoder-el">' +
-            ("<input type=\"text\" id=\"" + inputGuid + "\">") +
-            ("<button id=\"" + buttonGuid + "\">Search</button>") +
+            `<input type="text" id="${inputGuid}">` +
+            `<button id="${buttonGuid}">Search</button>` +
             '</div>');
         this.theButton = document.getElementById(buttonGuid);
         this.theInput = document.getElementById(inputGuid);
         this.reset();
-        var $theButton = $(this.theButton);
-        var $theInput = $(this.theInput);
-        $theButton.click(function (evt) {
+        let $theButton = $(this.theButton);
+        let $theInput = $(this.theInput);
+        $theButton.click((evt) => {
             evt.preventDefault();
             $theButton.addClass(geocoderLoadingClass);
-            _this.theButton.disabled = true;
-            _this.indicationLayer.getSource().clear();
-            $.get("https://geocode.xyz/" + _this.theInput.value + "?geoit=json", {}, function (d) {
-                var lat = parseFloat(d['latt']);
-                var lon = parseFloat(d['longt']);
+            this.theButton.disabled = true;
+            this.indicationLayer.getSource().clear();
+            $.get(`https://geocode.xyz/${this.theInput.value}?geoit=json`, {}, (d) => {
+                let lat = parseFloat(d['latt']);
+                let lon = parseFloat(d['longt']);
                 if ((lat == 0 && lon == 0) || d['error']) {
                     $theInput.addClass(invalidClass);
-                    _this.theInput.title = 'Specified Location Invalid';
-                    _this.theButton.title = 'Specified Location Invalid';
+                    this.theInput.title = 'Specified Location Invalid';
+                    this.theButton.title = 'Specified Location Invalid';
                 }
                 else {
-                    var v = _this.map.getView();
-                    var p = new Point_1.default([lon, lat]);
-                    var feat = new Feature_1.default(p);
-                    _this.indicationLayer.getSource().addFeature(feat);
+                    let v = this.map.getView();
+                    let p = new Point_1.default([lon, lat]);
+                    let feat = new Feature_1.default(p);
+                    this.indicationLayer.getSource().addFeature(feat);
                     p.transform(projections_1.proj4326, projections_1.proj3857);
                     v.setCenter(p.getCoordinates());
                     v.setZoom(13);
                 }
                 $theButton.removeClass(geocoderLoadingClass);
-                _this.theButton.disabled = false;
+                this.theButton.disabled = false;
             }, 'json');
         });
-        $(this.theInput).keyup(function (evt) {
+        $(this.theInput).keyup((evt) => {
             evt.preventDefault();
-            _this.theButton.disabled = _this.theInput.value.length == 0;
+            this.theButton.disabled = this.theInput.value.length == 0;
             $theInput.removeClass(invalidClass);
-            _this.theInput.title = '';
-            _this.theButton.title = '';
-            if (!_this.theButton.disabled && evt.keyCode == 13) {
+            this.theInput.title = '';
+            this.theButton.title = '';
+            if (!this.theButton.disabled && evt.keyCode == 13) {
                 $theButton.click();
             }
         });
     }
-    Geocode.prototype.reset = function () {
+    reset() {
         this.theButton.disabled = true;
         this.theInput.value = '';
-    };
-    return Geocode;
-}());
+    }
+}
 exports.Geocode = Geocode;
 //# sourceMappingURL=geocode.js.map
\ No newline at end of file
diff --git a/dist/olHelpers/geocode.js.map b/dist/olHelpers/geocode.js.map
index 0978b6c..b31fd92 100644
--- a/dist/olHelpers/geocode.js.map
+++ b/dist/olHelpers/geocode.js.map
@@ -1 +1 @@
-{"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../src/olHelpers/geocode.ts"],"names":[],"mappings":";;AAAA,0BAA4B;AAC5B,6CAA0C;AAC1C,6CAAiD;AACjD,0CAAqC;AACrC,2CAA4C;AAC5C,0CAAqC;AACrC,sCAAiC;AACjC,0CAAqC;AACrC,uCAAkC;AAClC,sCAAiC;AAIjC,IAAI,YAAY,GAAG,kBAAkB,CAAC;AACtC,IAAI,oBAAoB,GAAG,kBAAkB,CAAC;AAE9C,wCAAmC;AAEnC,yDAAyD;AAGzD;IAMI,iBAAY,MAAsB,EAAE,GAAQ;QAA5C,iBA8EC;QA7EG,IAAI,SAAS,GAAG,mBAAQ,EAAE,CAAC;QAC3B,IAAI,UAAU,GAAG,mBAAQ,EAAE,CAAC;QAE5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,IAAI,gBAAM,CAAC;YAC9B,MAAM,EAAE,IAAI,gBAAY,EAAE;YAC1B,KAAK,EAAE,IAAI,eAAK,CAAC;gBACb,KAAK,EAAE,IAAI,gBAAM,CAAC;oBACd,MAAM,EAAE,EAAE;oBACV,IAAI,EAAE,IAAI,cAAI,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAC,CAAC;oBAC5C,MAAM,EAAE,IAAI,gBAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;iBAC/C,CAAC;aACL,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAExC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,2BAA2B;aACxC,+BAA0B,SAAS,QAAI,CAAA;aACvC,kBAAe,UAAU,uBAAmB,CAAA;YAC5C,QAAQ,CAAC,CAAC;QAEd,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAsB,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAqB,CAAC;QAEvE,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjC,UAAU,CAAC,KAAK,CAAC,UAAC,GAAG;YAEjB,GAAG,CAAC,cAAc,EAAE,CAAC;YAErB,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAC1C,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC/B,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;YAEzC,CAAC,CAAC,GAAG,CACD,yBAAuB,KAAI,CAAC,QAAQ,CAAC,KAAK,gBAAa,EACvD,EAAE,EACF,UAAC,CAAC;gBACE,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEjC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;oBACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACjC,KAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,4BAA4B,CAAC;oBACnD,KAAI,CAAC,SAAS,CAAC,KAAK,GAAG,4BAA4B,CAAC;iBAEvD;qBAAM;oBACH,IAAI,CAAC,GAAG,KAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,IAAI,eAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,GAAG,IAAI,iBAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAClD,CAAC,CAAC,SAAS,CAAC,sBAAQ,EAAE,sBAAQ,CAAC,CAAC;oBAEhC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;oBAChC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBACjB;gBAED,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBAC7C,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YACpC,CAAC,EACD,MAAM,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAC,GAAG;YACvB,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAC1D,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpC,KAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;YACzB,KAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAE1B,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE;gBAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;aACtB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,uBAAK,GAAb;QACI,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAC7B,CAAC;IAQL,cAAC;AAAD,CAAC,AAjGD,IAiGC;AAjGY,0BAAO","sourcesContent":["import $ = require('jquery')\r\nimport {makeGuid} from '../util/makeGuid';\r\nimport {proj3857, proj4326} from './projections';\r\nimport Vector from 'ol/layer/Vector';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Circle from 'ol/style/Circle';\r\nimport Fill from 'ol/style/Fill';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Point from 'ol/geom/Point';\r\nimport Feature from 'ol/Feature';\r\n\r\n\r\n\r\nlet invalidClass = 'geocoder-invalid';\r\nlet geocoderLoadingClass = 'geocoder-loading';\r\nimport Map from 'ol/Map';\r\nimport Style from \"ol/style/Style\";\r\n\r\n// let testAddress = '65 7th Street, Prairie du Sac, WI';\r\n\r\n\r\nexport class Geocode {\r\n    private theButton: HTMLButtonElement;\r\n    private theInput: HTMLInputElement;\r\n    private map: Map;\r\n    private indicationLayer;\r\n\r\n    constructor(mapDiv: HTMLDivElement, map: Map) {\r\n        let inputGuid = makeGuid();\r\n        let buttonGuid = makeGuid();\r\n\r\n        this.map = map;\r\n        this.indicationLayer = new Vector({\r\n            source: new VectorSource(),\r\n            style: new Style({\r\n                image: new Circle({\r\n                    radius: 12,\r\n                    fill: new Fill({color: 'rgba(255,0,0,0.5)'}),\r\n                    stroke: new Stroke({color: 'red', width: 1})\r\n                })\r\n            })\r\n        });\r\n        this.map.addLayer(this.indicationLayer);\r\n\r\n        $(mapDiv).append('<div class=\"geocoder-el\">' +\r\n            `<input type=\"text\" id=\"${inputGuid}\">` +\r\n            `<button id=\"${buttonGuid}\">Search</button>` +\r\n            '</div>');\r\n\r\n        this.theButton = document.getElementById(buttonGuid) as HTMLButtonElement;\r\n        this.theInput = document.getElementById(inputGuid) as HTMLInputElement;\r\n\r\n        this.reset();\r\n\r\n        let $theButton = $(this.theButton);\r\n        let $theInput = $(this.theInput);\r\n\r\n        $theButton.click((evt) => {\r\n\r\n            evt.preventDefault();\r\n\r\n            $theButton.addClass(geocoderLoadingClass);\r\n            this.theButton.disabled = true;\r\n            this.indicationLayer.getSource().clear();\r\n\r\n            $.get(\r\n                `https://geocode.xyz/${this.theInput.value}?geoit=json`,\r\n                {},\r\n                (d) => {\r\n                    let lat = parseFloat(d['latt']);\r\n                    let lon = parseFloat(d['longt']);\r\n\r\n                    if ((lat == 0 && lon == 0) || d['error']) {\r\n                        $theInput.addClass(invalidClass);\r\n                        this.theInput.title = 'Specified Location Invalid';\r\n                        this.theButton.title = 'Specified Location Invalid';\r\n\r\n                    } else {\r\n                        let v = this.map.getView();\r\n                        let p = new Point([lon, lat]);\r\n                        let feat = new Feature(p);\r\n                        this.indicationLayer.getSource().addFeature(feat);\r\n                        p.transform(proj4326, proj3857);\r\n\r\n                        v.setCenter(p.getCoordinates());\r\n                        v.setZoom(13);\r\n                    }\r\n\r\n                    $theButton.removeClass(geocoderLoadingClass);\r\n                    this.theButton.disabled = false;\r\n                },\r\n                'json');\r\n        });\r\n\r\n        $(this.theInput).keyup((evt) => {\r\n            evt.preventDefault();\r\n            this.theButton.disabled = this.theInput.value.length == 0;\r\n            $theInput.removeClass(invalidClass);\r\n            this.theInput.title = '';\r\n            this.theButton.title = '';\r\n\r\n            if (!this.theButton.disabled && evt.keyCode == 13) {\r\n                $theButton.click();\r\n            }\r\n        })\r\n    }\r\n\r\n    private reset() {\r\n        this.theButton.disabled = true;\r\n        this.theInput.value = '';\r\n    }\r\n\r\n\r\n// https://geocode.xyz/65%2075h%20street%20prairie%20du%20sac%20wi?geoit=json\r\n\r\n// error\r\n// geocoder-invalid\r\n\r\n}\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"geocode.js","sourceRoot":"","sources":["../../src/olHelpers/geocode.ts"],"names":[],"mappings":";;AAAA,4BAA4B;AAC5B,+CAA0C;AAC1C,+CAAiD;AACjD,4CAAqC;AACrC,6CAA4C;AAC5C,4CAAqC;AACrC,wCAAiC;AACjC,4CAAqC;AACrC,yCAAkC;AAClC,wCAAiC;AAIjC,IAAI,YAAY,GAAG,kBAAkB,CAAC;AACtC,IAAI,oBAAoB,GAAG,kBAAkB,CAAC;AAE9C,0CAAmC;AAEnC,yDAAyD;AAGzD,MAAa,OAAO;IAMhB,YAAY,MAAsB,EAAE,GAAQ;QACxC,IAAI,SAAS,GAAG,mBAAQ,EAAE,CAAC;QAC3B,IAAI,UAAU,GAAG,mBAAQ,EAAE,CAAC;QAE5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,IAAI,gBAAM,CAAC;YAC9B,MAAM,EAAE,IAAI,gBAAY,EAAE;YAC1B,KAAK,EAAE,IAAI,eAAK,CAAC;gBACb,KAAK,EAAE,IAAI,gBAAM,CAAC;oBACd,MAAM,EAAE,EAAE;oBACV,IAAI,EAAE,IAAI,cAAI,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAC,CAAC;oBAC5C,MAAM,EAAE,IAAI,gBAAM,CAAC,EAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;iBAC/C,CAAC;aACL,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAExC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,2BAA2B;YACxC,0BAA0B,SAAS,IAAI;YACvC,eAAe,UAAU,mBAAmB;YAC5C,QAAQ,CAAC,CAAC;QAEd,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAsB,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAqB,CAAC;QAEvE,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAErB,GAAG,CAAC,cAAc,EAAE,CAAC;YAErB,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;YAEzC,CAAC,CAAC,GAAG,CACD,uBAAuB,IAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,EACvD,EAAE,EACF,CAAC,CAAC,EAAE,EAAE;gBACF,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEjC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;oBACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,4BAA4B,CAAC;oBACnD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,4BAA4B,CAAC;iBAEvD;qBAAM;oBACH,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,IAAI,eAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC9B,IAAI,IAAI,GAAG,IAAI,iBAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAClD,CAAC,CAAC,SAAS,CAAC,sBAAQ,EAAE,sBAAQ,CAAC,CAAC;oBAEhC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;oBAChC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBACjB;gBAED,UAAU,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YACpC,CAAC,EACD,MAAM,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;YAC1D,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAE1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE;gBAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;aACtB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,KAAK;QACT,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAC7B,CAAC;CAQJ;AAjGD,0BAiGC","sourcesContent":["import $ = require('jquery')\r\nimport {makeGuid} from '../util/makeGuid';\r\nimport {proj3857, proj4326} from './projections';\r\nimport Vector from 'ol/layer/Vector';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Circle from 'ol/style/Circle';\r\nimport Fill from 'ol/style/Fill';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Point from 'ol/geom/Point';\r\nimport Feature from 'ol/Feature';\r\n\r\n\r\n\r\nlet invalidClass = 'geocoder-invalid';\r\nlet geocoderLoadingClass = 'geocoder-loading';\r\nimport Map from 'ol/Map';\r\nimport Style from \"ol/style/Style\";\r\n\r\n// let testAddress = '65 7th Street, Prairie du Sac, WI';\r\n\r\n\r\nexport class Geocode {\r\n    private theButton: HTMLButtonElement;\r\n    private theInput: HTMLInputElement;\r\n    private map: Map;\r\n    private indicationLayer;\r\n\r\n    constructor(mapDiv: HTMLDivElement, map: Map) {\r\n        let inputGuid = makeGuid();\r\n        let buttonGuid = makeGuid();\r\n\r\n        this.map = map;\r\n        this.indicationLayer = new Vector({\r\n            source: new VectorSource(),\r\n            style: new Style({\r\n                image: new Circle({\r\n                    radius: 12,\r\n                    fill: new Fill({color: 'rgba(255,0,0,0.5)'}),\r\n                    stroke: new Stroke({color: 'red', width: 1})\r\n                })\r\n            })\r\n        });\r\n        this.map.addLayer(this.indicationLayer);\r\n\r\n        $(mapDiv).append('<div class=\"geocoder-el\">' +\r\n            `<input type=\"text\" id=\"${inputGuid}\">` +\r\n            `<button id=\"${buttonGuid}\">Search</button>` +\r\n            '</div>');\r\n\r\n        this.theButton = document.getElementById(buttonGuid) as HTMLButtonElement;\r\n        this.theInput = document.getElementById(inputGuid) as HTMLInputElement;\r\n\r\n        this.reset();\r\n\r\n        let $theButton = $(this.theButton);\r\n        let $theInput = $(this.theInput);\r\n\r\n        $theButton.click((evt) => {\r\n\r\n            evt.preventDefault();\r\n\r\n            $theButton.addClass(geocoderLoadingClass);\r\n            this.theButton.disabled = true;\r\n            this.indicationLayer.getSource().clear();\r\n\r\n            $.get(\r\n                `https://geocode.xyz/${this.theInput.value}?geoit=json`,\r\n                {},\r\n                (d) => {\r\n                    let lat = parseFloat(d['latt']);\r\n                    let lon = parseFloat(d['longt']);\r\n\r\n                    if ((lat == 0 && lon == 0) || d['error']) {\r\n                        $theInput.addClass(invalidClass);\r\n                        this.theInput.title = 'Specified Location Invalid';\r\n                        this.theButton.title = 'Specified Location Invalid';\r\n\r\n                    } else {\r\n                        let v = this.map.getView();\r\n                        let p = new Point([lon, lat]);\r\n                        let feat = new Feature(p);\r\n                        this.indicationLayer.getSource().addFeature(feat);\r\n                        p.transform(proj4326, proj3857);\r\n\r\n                        v.setCenter(p.getCoordinates());\r\n                        v.setZoom(13);\r\n                    }\r\n\r\n                    $theButton.removeClass(geocoderLoadingClass);\r\n                    this.theButton.disabled = false;\r\n                },\r\n                'json');\r\n        });\r\n\r\n        $(this.theInput).keyup((evt) => {\r\n            evt.preventDefault();\r\n            this.theButton.disabled = this.theInput.value.length == 0;\r\n            $theInput.removeClass(invalidClass);\r\n            this.theInput.title = '';\r\n            this.theButton.title = '';\r\n\r\n            if (!this.theButton.disabled && evt.keyCode == 13) {\r\n                $theButton.click();\r\n            }\r\n        })\r\n    }\r\n\r\n    private reset() {\r\n        this.theButton.disabled = true;\r\n        this.theInput.value = '';\r\n    }\r\n\r\n\r\n// https://geocode.xyz/65%2075h%20street%20prairie%20du%20sac%20wi?geoit=json\r\n\r\n// error\r\n// geocoder-invalid\r\n\r\n}\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/layerSwipe.js b/dist/olHelpers/layerSwipe.js
index d7516d0..4eb8fe2 100644
--- a/dist/olHelpers/layerSwipe.js
+++ b/dist/olHelpers/layerSwipe.js
@@ -3,18 +3,16 @@
  * Created by gavorhes on 6/1/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var nm = provide_1.default('collections.layerSwipe');
-var LayerSwipe = /** @class */ (function () {
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+let nm = provide_1.default('collections.layerSwipe');
+class LayerSwipe {
     /**
      *
      * @param {ol.Map} map - the map
      * @param {string} [sliderContent=''] - additional html to be added inside the slider div
      */
-    function LayerSwipe(map, sliderContent) {
-        var _this = this;
-        if (sliderContent === void 0) { sliderContent = ''; }
+    constructor(map, sliderContent = '') {
         sliderContent = sliderContent || '';
         /**
          *
@@ -30,28 +28,28 @@ var LayerSwipe = /** @class */ (function () {
         this.offset = null;
         this._map = map;
         this.$mapElement = $(map.getTargetElement());
-        this.$mapElement.append("<div class=\"layer-swiper\">" + sliderContent + "</div>");
+        this.$mapElement.append(`<div class="layer-swiper">${sliderContent}</div>`);
         this.$swiper = this.$mapElement.find('.layer-swiper');
         this.percentRight = this.percentRight;
         this.dragging = false;
-        this.$mapElement.mouseleave(function () {
-            _this.dragging = false;
+        this.$mapElement.mouseleave(() => {
+            this.dragging = false;
         });
         this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
             evt.preventDefault();
         });
-        this.$swiper.mousedown(function (evt) {
-            _this.dragging = true;
-            _this.offset = evt.offsetX;
+        this.$swiper.mousedown((evt) => {
+            this.dragging = true;
+            this.offset = evt.offsetX;
         });
-        $(window).mouseup(function () {
-            _this.dragging = false;
+        $(window).mouseup(() => {
+            this.dragging = false;
         });
-        this.$mapElement.mousemove(function (evt) {
-            if (_this.dragging) {
-                var mapLeft = _this.$mapElement.position().left;
-                var mapWidth = _this.$mapElement.width();
-                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
+        this.$mapElement.mousemove((evt) => {
+            if (this.dragging) {
+                let mapLeft = this.$mapElement.position().left;
+                let mapWidth = this.$mapElement.width();
+                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;
             }
         });
     }
@@ -59,69 +57,62 @@ var LayerSwipe = /** @class */ (function () {
      *
      * @param {LayerBase|*} lyr - layer to be added to left side
      */
-    LayerSwipe.prototype.addLeftLayer = function (lyr) {
-        var _this = this;
+    addLeftLayer(lyr) {
         if (this.leftLayers.indexOf(lyr) != -1) {
             return;
         }
-        lyr.olLayer.on('precompose', function (event) {
-            var ctx = event['context'];
-            var width = ctx.canvas.width * (_this.percentRight / 100);
+        lyr.olLayer.on('precompose', (event) => {
+            let ctx = event['context'];
+            let width = ctx.canvas.width * (this.percentRight / 100);
             ctx.save();
             ctx.beginPath();
             ctx.rect(0, 0, width, ctx.canvas.height);
             ctx.clip();
         });
         lyr.olLayer.on('postcompose', function (event) {
-            var ctx = event['context'];
+            let ctx = event['context'];
             ctx.restore();
         });
         this.leftLayers.push(lyr);
-    };
+    }
     /**
      *
      * @param {LayerBase|*} lyr - layer to be added to right side
      */
-    LayerSwipe.prototype.addRightLayer = function (lyr) {
-        var _this = this;
+    addRightLayer(lyr) {
         if (this.rightLayers.indexOf(lyr) != -1) {
             return;
         }
-        lyr.olLayer.on('precompose', function (event) {
-            var ctx = event['context'];
-            var width = ctx.canvas.width * (_this.percentRight / 100);
+        lyr.olLayer.on('precompose', (event) => {
+            let ctx = event['context'];
+            let width = ctx.canvas.width * (this.percentRight / 100);
             ctx.save();
             ctx.beginPath();
             ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
             ctx.clip();
         });
         lyr.olLayer.on('postcompose', function (event) {
-            var ctx = event['context'];
+            let ctx = event['context'];
             ctx.restore();
         });
         this.rightLayers.push(lyr);
-    };
-    Object.defineProperty(LayerSwipe.prototype, "percentRight", {
-        get: function () {
-            return this._percentRight;
-        },
-        set: function (percent) {
-            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
-            if (percent < 0) {
-                return;
-            }
-            else if (maxed && percent > this.percentRight) {
-                return;
-            }
-            this._percentRight = percent;
-            this.$swiper.css('left', this._percentRight.toFixed(2) + "%");
-            this._map.render();
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return LayerSwipe;
-}());
+    }
+    get percentRight() {
+        return this._percentRight;
+    }
+    set percentRight(percent) {
+        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
+        if (percent < 0) {
+            return;
+        }
+        else if (maxed && percent > this.percentRight) {
+            return;
+        }
+        this._percentRight = percent;
+        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);
+        this._map.render();
+    }
+}
 nm.LayerSwipe = LayerSwipe;
 exports.default = LayerSwipe;
 //# sourceMappingURL=layerSwipe.js.map
\ No newline at end of file
diff --git a/dist/olHelpers/layerSwipe.js.map b/dist/olHelpers/layerSwipe.js.map
index e1fc46e..70645b2 100644
--- a/dist/olHelpers/layerSwipe.js.map
+++ b/dist/olHelpers/layerSwipe.js.map
@@ -1 +1 @@
-{"version":3,"file":"layerSwipe.js","sourceRoot":"","sources":["../../src/olHelpers/layerSwipe.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nimport {LayerBase} from \"../layers\";\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections.layerSwipe');\r\n\r\n\r\nclass LayerSwipe {\r\n    leftLayers: Array<LayerBase>;\r\n    rightLayers: Array<LayerBase>;\r\n    _percentRight: number;\r\n    _map: ol.Map;\r\n    $mapElement: JQuery;\r\n    $swiper: JQuery;\r\n    dragging: boolean;\r\n    offset: number;\r\n    /**\r\n     *\r\n     * @param {ol.Map} map - the map\r\n     * @param {string} [sliderContent=''] - additional html to be added inside the slider div\r\n     */\r\n    constructor(map: ol.Map, sliderContent: string = '') {\r\n\r\n        sliderContent = sliderContent || '';\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.leftLayers = [];\r\n\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.rightLayers = [];\r\n\r\n        this._percentRight = 50;\r\n        this.offset = null;\r\n\r\n        this._map = map;\r\n        this.$mapElement = $(map.getTargetElement() as HTMLElement);\r\n        this.$mapElement.append(`<div class=\"layer-swiper\">${sliderContent}</div>`);\r\n\r\n\r\n        this.$swiper = this.$mapElement.find('.layer-swiper');\r\n        this.percentRight = this.percentRight;\r\n\r\n        this.dragging = false;\r\n\r\n        this.$mapElement.mouseleave(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){\r\n            evt.preventDefault();\r\n        });\r\n\r\n        this.$swiper.mousedown((evt) => {\r\n            this.dragging = true;\r\n            this.offset = evt.offsetX;\r\n        });\r\n\r\n        $(window).mouseup(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$mapElement.mousemove((evt) => {\r\n            if (this.dragging) {\r\n                let mapLeft = this.$mapElement.position().left;\r\n                let mapWidth = this.$mapElement.width();\r\n\r\n                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to left side\r\n     */\r\n    addLeftLayer(lyr: LayerBase) {\r\n\r\n        if (this.leftLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(0, 0, width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            ctx.restore();\r\n        });\r\n\r\n\r\n        this.leftLayers.push(lyr);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to right side\r\n     */\r\n    addRightLayer(lyr: LayerBase) {\r\n\r\n        if (this.rightLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            ctx.restore();\r\n        });\r\n\r\n        this.rightLayers.push(lyr);\r\n    }\r\n\r\n    get percentRight() : number{\r\n        return this._percentRight;\r\n    }\r\n\r\n    set percentRight(percent: number) {\r\n        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n\r\n        if (percent < 0) {\r\n            return;\r\n        } else if (maxed && percent > this.percentRight) {\r\n            return;\r\n        }\r\n\r\n        this._percentRight = percent;\r\n        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);\r\n        this._map.render();\r\n    }\r\n}\r\n\r\nnm.LayerSwipe = LayerSwipe;\r\nexport default LayerSwipe;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"layerSwipe.js","sourceRoot":"","sources":["../../src/olHelpers/layerSwipe.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 6/1/2016.\r\n */\r\n\r\n\r\nimport provide from '../util/provide';\r\nimport {LayerBase} from \"../layers\";\r\nimport $ = require('jquery');\r\n\r\nlet nm = provide('collections.layerSwipe');\r\n\r\n\r\nclass LayerSwipe {\r\n    leftLayers: Array<LayerBase>;\r\n    rightLayers: Array<LayerBase>;\r\n    _percentRight: number;\r\n    _map: ol.Map;\r\n    $mapElement: JQuery;\r\n    $swiper: JQuery;\r\n    dragging: boolean;\r\n    offset: number;\r\n    /**\r\n     *\r\n     * @param {ol.Map} map - the map\r\n     * @param {string} [sliderContent=''] - additional html to be added inside the slider div\r\n     */\r\n    constructor(map: ol.Map, sliderContent: string = '') {\r\n\r\n        sliderContent = sliderContent || '';\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.leftLayers = [];\r\n\r\n        /**\r\n         *\r\n         * @type {Array<LayerBase>}\r\n         */\r\n        this.rightLayers = [];\r\n\r\n        this._percentRight = 50;\r\n        this.offset = null;\r\n\r\n        this._map = map;\r\n        this.$mapElement = $(map.getTargetElement() as HTMLElement);\r\n        this.$mapElement.append(`<div class=\"layer-swiper\">${sliderContent}</div>`);\r\n\r\n\r\n        this.$swiper = this.$mapElement.find('.layer-swiper');\r\n        this.percentRight = this.percentRight;\r\n\r\n        this.dragging = false;\r\n\r\n        this.$mapElement.mouseleave(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){\r\n            evt.preventDefault();\r\n        });\r\n\r\n        this.$swiper.mousedown((evt) => {\r\n            this.dragging = true;\r\n            this.offset = evt.offsetX;\r\n        });\r\n\r\n        $(window).mouseup(() => {\r\n            this.dragging = false;\r\n        });\r\n\r\n        this.$mapElement.mousemove((evt) => {\r\n            if (this.dragging) {\r\n                let mapLeft = this.$mapElement.position().left;\r\n                let mapWidth = this.$mapElement.width();\r\n\r\n                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to left side\r\n     */\r\n    addLeftLayer(lyr: LayerBase) {\r\n\r\n        if (this.leftLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(0, 0, width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            ctx.restore();\r\n        });\r\n\r\n\r\n        this.leftLayers.push(lyr);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - layer to be added to right side\r\n     */\r\n    addRightLayer(lyr: LayerBase) {\r\n\r\n        if (this.rightLayers.indexOf(lyr) != -1){\r\n            return;\r\n        }\r\n\r\n        lyr.olLayer.on('precompose', (event) => {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            let width = ctx.canvas.width * (this.percentRight / 100);\r\n\r\n            ctx.save();\r\n            ctx.beginPath();\r\n            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);\r\n            ctx.clip();\r\n        });\r\n\r\n        lyr.olLayer.on('postcompose', function (event) {\r\n            let ctx = event['context'] as CanvasRenderingContext2D;\r\n            ctx.restore();\r\n        });\r\n\r\n        this.rightLayers.push(lyr);\r\n    }\r\n\r\n    get percentRight() : number{\r\n        return this._percentRight;\r\n    }\r\n\r\n    set percentRight(percent: number) {\r\n        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();\r\n\r\n        if (percent < 0) {\r\n            return;\r\n        } else if (maxed && percent > this.percentRight) {\r\n            return;\r\n        }\r\n\r\n        this._percentRight = percent;\r\n        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);\r\n        this._map.render();\r\n    }\r\n}\r\n\r\nnm.LayerSwipe = LayerSwipe;\r\nexport default LayerSwipe;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapInteractionBase.js b/dist/olHelpers/mapInteractionBase.js
index 6fbc0df..6fc1fea 100644
--- a/dist/olHelpers/mapInteractionBase.js
+++ b/dist/olHelpers/mapInteractionBase.js
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/8/2015.
  */
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('olHelpers');
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('olHelpers');
 /**
  * base interaction
  */
-var MapInteractionBase = /** @class */ (function () {
+class MapInteractionBase {
     /**
      * map interaction base
      * @param subtype - the interaction subtype
      */
-    function MapInteractionBase(subtype) {
+    constructor(subtype) {
         this._map = null;
         this._initialized = false;
         this._subtype = subtype;
@@ -23,54 +23,45 @@ var MapInteractionBase = /** @class */ (function () {
      * @param theMap - the ol Map
      * @returns true for already initialized
      */
-    MapInteractionBase.prototype.init = function (theMap) {
+    init(theMap) {
         if (!this._initialized) {
             this._map = theMap;
             this._initialized = true;
         }
-    };
-    Object.defineProperty(MapInteractionBase.prototype, "map", {
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-        get: function () {
-            return this._map;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(MapInteractionBase.prototype, "initialized", {
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-        get: function () {
-            return this._initialized;
-        },
-        enumerable: true,
-        configurable: true
-    });
+    }
+    /**
+     * get reference to the ol map object
+     * @returns {ol.Map} the map object
+     */
+    get map() {
+        return this._map;
+    }
+    /**
+     * get if is initialized
+     * @returns {boolean} is initialized
+     */
+    get initialized() {
+        return this._initialized;
+    }
     /**
      * Check the initialization status and throw exception if not valid yet
      * @protected
      */
-    MapInteractionBase.prototype._checkInit = function () {
+    _checkInit() {
         if (!this.initialized) {
-            var msg = this._subtype + " object not initialized";
+            let msg = `${this._subtype} object not initialized`;
             alert(msg);
             console.log(msg);
             throw msg;
         }
-    };
+    }
     /**
      * Check the initialization status and throw exception if not valid yet
      */
-    MapInteractionBase.prototype.checkInit = function () {
+    checkInit() {
         this._checkInit();
-    };
-    return MapInteractionBase;
-}());
+    }
+}
 exports.MapInteractionBase = MapInteractionBase;
 nm.MapInteractionBase = MapInteractionBase;
 exports.default = MapInteractionBase;
diff --git a/dist/olHelpers/mapInteractionBase.js.map b/dist/olHelpers/mapInteractionBase.js.map
index 0f8a2d7..61a28ab 100644
--- a/dist/olHelpers/mapInteractionBase.js.map
+++ b/dist/olHelpers/mapInteractionBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapInteractionBase.js","sourceRoot":"","sources":["../../src/olHelpers/mapInteractionBase.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,2CAAsC;AACtC,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAKhC;;GAEG;AACH;IAKI;;;OAGG;IACH,4BAAY,OAAe;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,iCAAI,GAAJ,UAAK,MAAW;QACZ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAC;YACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;IACL,CAAC;IAMD,sBAAI,mCAAG;QAJP;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;;;OAAA;IAMD,sBAAI,2CAAW;QAJf;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAED;;;OAGG;IACH,uCAAU,GAAV;QACI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,GAAG,GAAM,IAAI,CAAC,QAAQ,4BAAyB,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED;;OAEG;IACH,sCAAS,GAAT;QACI,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IACL,yBAAC;AAAD,CAAC,AA9DD,IA8DC;AA9DY,gDAAkB;AAgE/B,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C,kBAAe,kBAAkB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers');\r\nimport Map from 'ol/Map'\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapInteractionBase.js","sourceRoot":"","sources":["../../src/olHelpers/mapInteractionBase.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,6CAAsC;AACtC,MAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAKhC;;GAEG;AACH,MAAa,kBAAkB;IAK3B;;;OAGG;IACH,YAAY,OAAe;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,MAAW;QACZ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAC;YACnB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;IACL,CAAC;IAED;;;OAGG;IACH,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,yBAAyB,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;SACb;IACL,CAAC;IAED;;OAEG;IACH,SAAS;QACL,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AA9DD,gDA8DC;AAED,EAAE,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;AAC3C,kBAAe,kBAAkB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers');\r\nimport Map from 'ol/Map'\r\n\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nexport class MapInteractionBase {\r\n    _map: Map;\r\n    _initialized: boolean;\r\n    _subtype: string;\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param subtype - the interaction subtype\r\n     */\r\n    constructor(subtype: string) {\r\n        this._map = null;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param theMap - the ol Map\r\n     * @returns true for already initialized\r\n     */\r\n    init(theMap: Map){\r\n        if (!this._initialized){\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\n\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapMove.js b/dist/olHelpers/mapMove.js
index a4f09a3..7f18e1f 100644
--- a/dist/olHelpers/mapMove.js
+++ b/dist/olHelpers/mapMove.js
@@ -3,7 +3,7 @@
  * Created by gavorhes on 11/3/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var mapMoveCls_1 = require("./mapMoveCls");
+const mapMoveCls_1 = require("./mapMoveCls");
 /**
  * The single map move object catch is that it is common to multimap pages
  * @type {MapMoveCls}
diff --git a/dist/olHelpers/mapMove.js.map b/dist/olHelpers/mapMove.js.map
index 608dad2..d10d76e 100644
--- a/dist/olHelpers/mapMove.js.map
+++ b/dist/olHelpers/mapMove.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapMove.js","sourceRoot":"","sources":["../../src/olHelpers/mapMove.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,2CAAsC;AAEtC;;;GAGG;AAEU,QAAA,OAAO,GAAG,IAAI,oBAAU,EAAE,CAAC;AACxC,kBAAe,eAAO,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapMove.js","sourceRoot":"","sources":["../../src/olHelpers/mapMove.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6CAAsC;AAEtC;;;GAGG;AAEU,QAAA,OAAO,GAAG,IAAI,oBAAU,EAAE,CAAC;AACxC,kBAAe,eAAO,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\n\r\nexport const mapMove = new MapMoveCls();\r\nexport default mapMove;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapMoveCls.js b/dist/olHelpers/mapMoveCls.js
index bc79b4f..8a7a5c0 100644
--- a/dist/olHelpers/mapMoveCls.js
+++ b/dist/olHelpers/mapMoveCls.js
@@ -1,98 +1,78 @@
 "use strict";
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = require("./mapInteractionBase");
-var checkDefined = require("../util/checkDefined");
-var provide_1 = require("../util/provide");
-var makeGuid_1 = require("../util/makeGuid");
-var $ = require("jquery");
-var nm = provide_1.default('olHelpers');
+const mapInteractionBase_1 = require("./mapInteractionBase");
+const checkDefined = require("../util/checkDefined");
+const provide_1 = require("../util/provide");
+const makeGuid_1 = require("../util/makeGuid");
+const $ = require("jquery");
+const nm = provide_1.default('olHelpers');
 /**
  * assists with map move interactions, trigger callback functions
  * @augments MapInteractionBase
  */
-var MapMoveCls = /** @class */ (function (_super) {
-    __extends(MapMoveCls, _super);
+class MapMoveCls extends mapInteractionBase_1.default {
     /**
      * constructor called implicitly
      */
-    function MapMoveCls() {
-        var _this = _super.call(this, 'map move') || this;
-        _this._arrLyrRequest = [];
-        _this._arrLyrTimeout = [];
-        _this._arrLayer = [];
-        _this._lookupLayer = {};
-        _this._mapMoveCallbacks = [];
-        _this._mapMoveCallbacksLookup = {};
-        _this._mapMoveCallbackDelays = [];
-        _this._mapMoveCallbackContext = [];
-        _this._mapMoveCallbackTimeout = [];
-        _this._mapExtent = undefined;
-        _this._zoomLevel = undefined;
-        return _this;
+    constructor() {
+        super('map move');
+        this._arrLyrRequest = [];
+        this._arrLyrTimeout = [];
+        this._arrLayer = [];
+        this._lookupLayer = {};
+        this._mapMoveCallbacks = [];
+        this._mapMoveCallbacksLookup = {};
+        this._mapMoveCallbackDelays = [];
+        this._mapMoveCallbackContext = [];
+        this._mapMoveCallbackTimeout = [];
+        this._mapExtent = undefined;
+        this._zoomLevel = undefined;
     }
     /**
      * initialize the map move object
      * @param theMap - the ol map
      */
-    MapMoveCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-            _this._updateMapExtent();
+    init(theMap) {
+        super.init(theMap);
+        this.map.getView().on(['change:center', 'change:resolution'], (e) => {
+            this._updateMapExtent();
             // trigger the layer updates
-            for (var i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
+            for (let i = 0; i < this._arrLayer.length; i++) {
+                this.triggerLyrLoad(this._arrLayer[i], i, e.type);
             }
             // trigger the map callbacks
-            for (var i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
+            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {
+                this.triggerMoveCallback(i, e.type);
             }
         });
-    };
-    MapMoveCls.prototype._updateMapExtent = function () {
-        var theView = this.map.getView();
+    }
+    _updateMapExtent() {
+        let theView = this.map.getView();
         this._zoomLevel = theView.getZoom();
-        var extentArray = theView.calculateExtent(this.map.getSize());
+        let extentArray = theView.calculateExtent(this.map.getSize());
         this._mapExtent = {
             minX: extentArray[0],
             minY: extentArray[1],
             maxX: extentArray[2],
             maxY: extentArray[3]
         };
-    };
-    Object.defineProperty(MapMoveCls.prototype, "mapExtent", {
-        /**
-         * return the map extent
-         */
-        get: function () {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-            return this._mapExtent;
-        },
-        enumerable: true,
-        configurable: true
-    });
+    }
+    /**
+     * return the map extent
+     */
+    get mapExtent() {
+        if (!this._mapExtent) {
+            this._updateMapExtent();
+        }
+        return this._mapExtent;
+    }
     /**
      * Trigger the layer load
      * @param lyr the layer being acted on
      * @param index index of the layer
      * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'
      */
-    MapMoveCls.prototype.triggerLyrLoad = function (lyr, index, eventType) {
+    triggerLyrLoad(lyr, index, eventType) {
         if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
             throw 'need to define lyr or index';
         }
@@ -113,13 +93,13 @@ var MapMoveCls = /** @class */ (function (_super) {
             this._arrLyrRequest[index] = null;
         }
         // dummy callback used if before load returns false
-        var callbackFunc = function () { };
+        let callbackFunc = function () { };
         if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
             lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-            var __this_1 = this;
+            let __this = this;
             callbackFunc = function () {
                 function innerFunction(theLayer, theIndex) {
-                    var _innerThis = this;
+                    let _innerThis = this;
                     this._arrLyrRequest[theIndex] = $.get(theLayer.url, theLayer.mapMoveParams, function (d) {
                         /**
                          * @type {LayerBaseVector}
@@ -137,21 +117,21 @@ var MapMoveCls = /** @class */ (function (_super) {
                         _innerThis._arrLyrRequest[theIndex] = null;
                     });
                 }
-                innerFunction.call(__this_1, lyr, index);
+                innerFunction.call(__this, lyr, index);
             };
         }
         else {
             lyr.clear();
         }
         this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    };
+    }
     /**
      * trigger the map move call back at the given index
      * @param ind - the index of the layer
      * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'
      * @param functionId=undefined the function id used to reference the added callback function
      */
-    MapMoveCls.prototype.triggerMoveCallback = function (ind, eventType, functionId) {
+    triggerMoveCallback(ind, eventType, functionId) {
         if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
             throw 'either the function index or the id must be defined';
         }
@@ -167,10 +147,10 @@ var MapMoveCls = /** @class */ (function (_super) {
             clearTimeout(this._mapMoveCallbackTimeout[ind]);
             this._mapMoveCallbackTimeout[ind] = null;
         }
-        var ctx = this._mapMoveCallbackContext[ind];
-        var theFunc = this._mapMoveCallbacks[ind];
-        var __this = this;
-        var f = function () {
+        let ctx = this._mapMoveCallbackContext[ind];
+        let theFunc = this._mapMoveCallbacks[ind];
+        let __this = this;
+        let f = function () {
             if (ctx !== null) {
                 theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);
             }
@@ -179,14 +159,13 @@ var MapMoveCls = /** @class */ (function (_super) {
             }
         };
         this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    };
+    }
     /**
      * Add a layer to the interaction
      * @param  lyr - layer to add
      * @param triggerOnAdd - if the layer should be loaded on add
      */
-    MapMoveCls.prototype.addVectorLayer = function (lyr, triggerOnAdd) {
-        if (triggerOnAdd === void 0) { triggerOnAdd = true; }
+    addVectorLayer(lyr, triggerOnAdd = true) {
         if (this._arrLayer.indexOf(lyr) > -1) {
             console.log('already added ' + lyr.name + ' to map move');
             return;
@@ -203,7 +182,7 @@ var MapMoveCls = /** @class */ (function (_super) {
             }
             this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
         }
-    };
+    }
     /**
      * add a callback to the map move event
      * @param func - callback function
@@ -212,7 +191,7 @@ var MapMoveCls = /** @class */ (function (_super) {
      * @param triggerOnAdd if the layer should be loaded on add to mapMove
      * @param functionId optional id to reference the function later for outside triggering
      */
-    MapMoveCls.prototype.addCallback = function (func, context, delay, triggerOnAdd, functionId) {
+    addCallback(func, context, delay, triggerOnAdd, functionId) {
         if (this._mapMoveCallbacks.indexOf(func) > -1) {
             console.log('this function already added to map move');
             return;
@@ -233,9 +212,8 @@ var MapMoveCls = /** @class */ (function (_super) {
             }
             this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
         }
-    };
-    return MapMoveCls;
-}(mapInteractionBase_1.default));
+    }
+}
 exports.MapMoveCls = MapMoveCls;
 nm.MapMoveCls = MapMoveCls;
 exports.default = MapMoveCls;
diff --git a/dist/olHelpers/mapMoveCls.js.map b/dist/olHelpers/mapMoveCls.js.map
index feb02d8..1ddce7b 100644
--- a/dist/olHelpers/mapMoveCls.js.map
+++ b/dist/olHelpers/mapMoveCls.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapMoveCls.js","sourceRoot":"","sources":["../../src/olHelpers/mapMoveCls.ts"],"names":[],"mappings":"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","sourcesContent":["import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {} from 'ol/coordinate';\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: {[s: string]: LayerBaseVector};\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: {[s: string]: mapMoveCallbackFunction};\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e: {type: string}) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer: LayerBaseVector, theIndex: number) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = func;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapMoveCls.js","sourceRoot":"","sources":["../../src/olHelpers/mapMoveCls.ts"],"names":[],"mappings":"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","sourcesContent":["import LayerBaseVector from \"../layers/LayerBaseVector\";\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {} from 'ol/coordinate';\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nexport interface extentObject{\r\n    minX: number;\r\n    minY: number;\r\n    maxX: number;\r\n    maxY: number;\r\n}\r\n\r\nexport interface mapMoveCallbackFunction{\r\n    /**\r\n     *\r\n     * @param extent extent as predefined object minX, minX, maxX, maxY\r\n     * @param zoomLevel current zoom level\r\n     * @param evtType the event type 'change:center', 'change:resolution'\r\n     */\r\n    (extent: extentObject, zoomLevel: number, evtType?: string): any\r\n}\r\n\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapMoveCls extends MapInteractionBase {\r\n    _mapExtent: extentObject;\r\n    _zoomLevel: number;\r\n    _lookupLayer: {[s: string]: LayerBaseVector};\r\n    _arrLayer: Array<LayerBaseVector>;\r\n    _arrLyrTimeout: Array<number>;\r\n    _mapMoveCallbackTimeout: Array<number>;\r\n    _mapMoveCallbackDelays: Array<number>;\r\n    _mapMoveCallbacksLookup: {[s: string]: mapMoveCallbackFunction};\r\n    _mapMoveCallbackContext: Array<Object>;\r\n    _mapMoveCallbacks: Array<mapMoveCallbackFunction>;\r\n    _arrLyrRequest: Array<any>;\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param theMap - the ol map\r\n     */\r\n    init(theMap: Map){\r\n        super.init(theMap);\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], (e: {type: string}) =>{\r\n\r\n           this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < this._arrLayer.length; i++) {\r\n                this.triggerLyrLoad(this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < this._mapMoveCallbacks.length; i++) {\r\n                this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param lyr the layer being acted on\r\n     * @param index index of the layer\r\n     * @param eventType the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr: LayerBaseVector, index?: number, eventType?: string) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let __this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer: LayerBaseVector, theIndex: number) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(__this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param ind - the index of the layer\r\n     * @param eventType=undefined the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param functionId=undefined the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind: number, eventType?: string, functionId?: string) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let __this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, __this._mapExtent, __this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(__this._mapExtent, __this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param  lyr - layer to add\r\n     * @param triggerOnAdd - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr: LayerBaseVector, triggerOnAdd: boolean = true) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param func - callback function\r\n     * @param context - the context to use for this function\r\n     * @param delay=50 the delay before call load\r\n     * @param triggerOnAdd if the layer should be loaded on add to mapMove\r\n     * @param functionId optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func: mapMoveCallbackFunction, context?: any, delay?: number, triggerOnAdd? : boolean, functionId?: string) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = func;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapPopup.js b/dist/olHelpers/mapPopup.js
index c0a4074..ff3af8b 100644
--- a/dist/olHelpers/mapPopup.js
+++ b/dist/olHelpers/mapPopup.js
@@ -3,7 +3,7 @@
  * Created by gavorhes on 11/3/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var mapPopupCls_1 = require("./mapPopupCls");
+const mapPopupCls_1 = require("./mapPopupCls");
 /**
  * The single popup object catch is that it is common to multimap pages
  * @type {MapPopupCls}
diff --git a/dist/olHelpers/mapPopup.js.map b/dist/olHelpers/mapPopup.js.map
index 1c43274..7ec175a 100644
--- a/dist/olHelpers/mapPopup.js.map
+++ b/dist/olHelpers/mapPopup.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../src/olHelpers/mapPopup.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6CAAwC;AAExC;;;GAGG;AACU,QAAA,QAAQ,GAAG,IAAI,qBAAW,EAAiB,CAAC;AACzD,kBAAe,gBAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapPopup.js","sourceRoot":"","sources":["../../src/olHelpers/mapPopup.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,+CAAwC;AAExC;;;GAGG;AACU,QAAA,QAAQ,GAAG,IAAI,qBAAW,EAAiB,CAAC;AACzD,kBAAe,gBAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport const mapPopup = new MapPopupCls() as MapPopupCls;\r\nexport default mapPopup;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapPopupCls.js b/dist/olHelpers/mapPopupCls.js
index 13fa8fd..01933f7 100644
--- a/dist/olHelpers/mapPopupCls.js
+++ b/dist/olHelpers/mapPopupCls.js
@@ -2,30 +2,17 @@
 /**
  * Created by gavorhes on 11/3/2015.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var mapInteractionBase_1 = require("./mapInteractionBase");
-var provide_1 = require("../util/provide");
-var $ = require("jquery");
-var Vector_1 = require("ol/layer/Vector");
-var Vector_2 = require("ol/source/Vector");
-var Overlay_1 = require("ol/Overlay");
-var easing = require("ol/easing");
-var style_1 = require("ol/style");
-var nm = provide_1.default('olHelpers');
-var FeatureLayerProperties = /** @class */ (function () {
+const mapInteractionBase_1 = require("./mapInteractionBase");
+const provide_1 = require("../util/provide");
+const $ = require("jquery");
+const Vector_1 = require("ol/layer/Vector");
+const Vector_2 = require("ol/source/Vector");
+const Overlay_1 = require("ol/Overlay");
+const easing = require("ol/easing");
+const style_1 = require("ol/style");
+const nm = provide_1.default('olHelpers');
+class FeatureLayerProperties {
     /**
      *
      * @param feature the feature
@@ -34,7 +21,7 @@ var FeatureLayerProperties = /** @class */ (function () {
      * @param selectionLayer - the ol selection layer
      * @param [esriLayerName=undefined] - esri layer name
      */
-    function FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
+    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {
         this.feature = feature;
         this.layer = layer;
         this.layerIndex = layerIndex;
@@ -42,27 +29,21 @@ var FeatureLayerProperties = /** @class */ (function () {
         this.popupContent = '';
         this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
     }
-    Object.defineProperty(FeatureLayerProperties.prototype, "layerName", {
-        get: function () {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            }
-            else {
-                return this.layer.name;
-            }
-        },
-        enumerable: true,
-        configurable: true
-    });
-    return FeatureLayerProperties;
-}());
+    get layerName() {
+        if (typeof this.esriLayerName == 'string') {
+            return this.esriLayerName;
+        }
+        else {
+            return this.layer.name;
+        }
+    }
+}
 exports.FeatureLayerProperties = FeatureLayerProperties;
 /**
  * map popup class
  * @augments MapInteractionBase
  */
-var MapPopupCls = /** @class */ (function (_super) {
-    __extends(MapPopupCls, _super);
+class MapPopupCls extends mapInteractionBase_1.default {
     /**
      * Definition for openlayers style function
      * @callback olStyleFunction
@@ -72,39 +53,37 @@ var MapPopupCls = /** @class */ (function (_super) {
     /**
      * map popup constructor
      */
-    function MapPopupCls() {
-        var _this = _super.call(this, 'map popup') || this;
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayers = [];
+    constructor() {
+        super('map popup');
+        this._arrPopupLayerIds = [];
+        this._arrPopupLayers = [];
         // this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
+        this._arrPopupContentFunction = [];
+        this._$popupContainer = undefined;
+        this._$popupContent = undefined;
+        this._$popupCloser = undefined;
+        this._popupOverlay = undefined;
+        this._selectionLayers = [];
+        this._selectionLayerLookup = {};
+        this._mapClickFunctions = [];
         //let a = function($jqueryContent){console.log($jqueryContent)};
         //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        _this._esriMapServiceLayers = [];
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-        _this._passThroughLayerFeatureArray = [];
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-        return _this;
+        this._popupChangedFunctions = [];
+        this._esriMapServiceLayers = [];
+        this._popupOpen = false;
+        this._popupCoordinate = null;
+        this._passThroughLayerFeatureArray = [];
+        this._currentPopupIndex = -1;
+        this._popupContentLength = 0;
     }
     /**
      * map popup initialization
      * @param  theMap - the ol map
      */
-    MapPopupCls.prototype.init = function (theMap) {
-        var _this = this;
-        _super.prototype.init.call(this, theMap);
-        var $map;
-        var target = this.map.getTarget();
+    init(theMap) {
+        super.init(theMap);
+        let $map;
+        let target = this.map.getTarget();
         if (typeof target == 'string') {
             $map = $('#' + target);
         }
@@ -118,7 +97,7 @@ var MapPopupCls = /** @class */ (function (_super) {
         this._$popupContainer = $map.find('.ol-popup');
         this._$popupContent = $map.find('.popup-content');
         this._$popupCloser = $map.find('.ol-popup-closer');
-        var _ease = function (n) {
+        let _ease = (n) => {
             return easing['inAndOut'](n);
         };
         this._popupOverlay = new Overlay_1.default({
@@ -131,138 +110,135 @@ var MapPopupCls = /** @class */ (function (_super) {
             }
         });
         this._map.addOverlay(this._popupOverlay);
-        this._$popupCloser.click(function (evt) {
-            _this.closePopup();
+        this._$popupCloser.click((evt) => {
+            this.closePopup();
         });
         // display popup on click
-        this._map.on('singleclick', function (evt) {
-            _this.closePopup();
-            _this._popupCoordinate = evt['coordinate'];
+        this._map.on('singleclick', (evt) => {
+            this.closePopup();
+            this._popupCoordinate = evt['coordinate'];
             // esri map service layers
-            if (_this._esriMapServiceLayers.length > 0) {
-                var queryParams = {
+            if (this._esriMapServiceLayers.length > 0) {
+                let queryParams = {
                     geometry: evt['coordinate'].join(','),
                     geometryType: 'esriGeometryPoint',
                     layers: 'all',
-                    sr: _this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: _this._map.getView().calculateExtent(_this._map.getSize()).join(','),
-                    imageDisplay: _this._map.getSize().join(',') + ',96',
+                    sr: this._map.getView().getProjection().getCode().split(':')[1],
+                    mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),
+                    imageDisplay: this._map.getSize().join(',') + ',96',
                     returnGeometry: true,
                     tolerance: 15,
                     f: 'pjson'
                 };
-                for (var _i = 0, _a = _this._esriMapServiceLayers; _i < _a.length; _i++) {
-                    var l = _a[_i];
+                for (let l of this._esriMapServiceLayers) {
                     l.getPopupInfo(queryParams);
                 }
             }
-            var layerFeatureObjectArray = _this._featuresAtPixel(evt['pixel']);
-            _this._passThroughLayerFeatureArray = [];
-            _this._currentPopupIndex = -1;
-            for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                var featObj = layerFeatureObjectArray[i];
-                var props = featObj.feature.getProperties();
-                var popupContentResponse = _this._arrPopupContentFunction[featObj.layerIndex](props, _this._$popupContent);
+            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel']);
+            this._passThroughLayerFeatureArray = [];
+            this._currentPopupIndex = -1;
+            for (let i = 0; i < layerFeatureObjectArray.length; i++) {
+                let featObj = layerFeatureObjectArray[i];
+                let props = featObj.feature.getProperties();
+                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);
                 //skip if return was false
                 if (popupContentResponse === false) {
                     //continue;
                 }
                 else if (typeof popupContentResponse == 'string') {
                     featObj.popupContent = popupContentResponse;
-                    _this._passThroughLayerFeatureArray.push(featObj);
+                    this._passThroughLayerFeatureArray.push(featObj);
                 }
                 else {
                     featObj.selectionLayer.getSource().addFeature(featObj.feature);
                 }
             }
-            _this._popupContentLength = _this._passThroughLayerFeatureArray.length;
-            _this._currentPopupIndex = -1;
-            var popupHtml = '<div class="ol-popup-nav">';
+            this._popupContentLength = this._passThroughLayerFeatureArray.length;
+            this._currentPopupIndex = -1;
+            let popupHtml = '<div class="ol-popup-nav">';
             popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
             popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += "<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>";
-            popupHtml += "<span>&nbsp;of&nbsp;</span>";
-            popupHtml += "<span class=\"popup-content-length\" style=\"font-weight: bold;\">" + _this._popupContentLength + "</span>";
-            popupHtml += "<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>";
-            popupHtml += "<span class=\"current-popup-layer-name\"></span>";
+            popupHtml += `<span class="current-popup-item-number" style="font-weight: bold;"></span>`;
+            popupHtml += `<span>&nbsp;of&nbsp;</span>`;
+            popupHtml += `<span class="popup-content-length" style="font-weight: bold;">${this._popupContentLength}</span>`;
+            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;
+            popupHtml += `<span class="current-popup-layer-name"></span>`;
             popupHtml += '</div>';
             popupHtml += '<div class="ol-popup-inner">';
             popupHtml += '</div>';
-            _this._$popupContent.html(popupHtml);
-            _this._$popupContent.find('.previous-popup').click(function () {
-                if (_this._popupContentLength == 1) {
+            this._$popupContent.html(popupHtml);
+            this._$popupContent.find('.previous-popup').click(() => {
+                if (this._popupContentLength == 1) {
                     return;
                 }
-                if (_this._currentPopupIndex == 0) {
-                    _this._currentPopupIndex = _this._popupContentLength - 1;
+                if (this._currentPopupIndex == 0) {
+                    this._currentPopupIndex = this._popupContentLength - 1;
                 }
                 else {
-                    _this._currentPopupIndex--;
+                    this._currentPopupIndex--;
                 }
-                _this._triggerFeatSelect();
+                this._triggerFeatSelect();
             });
-            var nextPopup = _this._$popupContent.find('.next-popup');
-            nextPopup.click(function () {
-                if (_this._popupContentLength == 1 && _this._currentPopupIndex > -1) {
+            let nextPopup = this._$popupContent.find('.next-popup');
+            nextPopup.click(() => {
+                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {
                     return;
                 }
-                if (_this._currentPopupIndex == _this._popupContentLength - 1) {
-                    _this._currentPopupIndex = 0;
+                if (this._currentPopupIndex == this._popupContentLength - 1) {
+                    this._currentPopupIndex = 0;
                 }
                 else {
-                    _this._currentPopupIndex++;
+                    this._currentPopupIndex++;
                 }
-                _this._triggerFeatSelect();
+                this._triggerFeatSelect();
             });
-            if (_this._popupContentLength > 0) {
+            if (this._popupContentLength > 0) {
                 nextPopup.trigger('click');
-                _this._popupOverlay.setPosition(_this._popupCoordinate);
-                _this._$popupContent.scrollTop(0);
-                _this._popupOpen = true;
+                this._popupOverlay.setPosition(this._popupCoordinate);
+                this._$popupContent.scrollTop(0);
+                this._popupOpen = true;
             }
         });
         //change mouse cursor when over marker
-        this._map.on('pointermove', function (evt) {
+        this._map.on('pointermove', (evt) => {
             if (evt['dragging']) {
                 return;
             }
-            var pixel = _this.map.getEventPixel(evt['originalEvent']);
-            var hit = false;
-            _this.map.forEachFeatureAtPixel(pixel, function (f, l) {
+            let pixel = this.map.getEventPixel(evt['originalEvent']);
+            let hit = false;
+            this.map.forEachFeatureAtPixel(pixel, (f, l) => {
                 if (hit) {
                     return;
                 }
-                for (var _i = 0, _a = _this._arrPopupLayers; _i < _a.length; _i++) {
-                    var vLyr = _a[_i];
+                for (let vLyr of this._arrPopupLayers) {
                     if (vLyr.olLayer == l) {
                         hit = true;
                         break;
                     }
                 }
             });
-            var mapElement = _this.map.getTargetElement();
+            let mapElement = this.map.getTargetElement();
             mapElement.style.cursor = hit ? 'pointer' : '';
         });
-    };
+    }
     /**
      * helper to select features
      * @private
      */
-    MapPopupCls.prototype._triggerFeatSelect = function () {
-        var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
+    _triggerFeatSelect() {
+        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
+        let $innerPopup = this._$popupContent.find('.ol-popup-inner');
+        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
         this.clearSelection();
-        var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
+        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
         $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
         $layerNameSpan.html(lyrFeatObj.layerName);
         $innerPopup.html(lyrFeatObj.popupContent);
         lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (var _i = 0, _a = this._popupChangedFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
+        for (let f of this._popupChangedFunctions) {
             f(this._$popupContent);
         }
-    };
+    }
     /**
      *
      * @param feature - the ol feature
@@ -270,8 +246,8 @@ var MapPopupCls = /** @class */ (function (_super) {
      * @param {string} popupContent - popup content
      * @param {string} esriName - esri layer name
      */
-    MapPopupCls.prototype.addMapServicePopupContent = function (feature, lyr, popupContent, esriName) {
-        var featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
+    addMapServicePopupContent(feature, lyr, popupContent, esriName) {
+        let featLayerObject = new FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
         featLayerObject.popupContent = popupContent;
         this._passThroughLayerFeatureArray.push(featLayerObject);
         this._popupContentLength++;
@@ -282,34 +258,33 @@ var MapPopupCls = /** @class */ (function (_super) {
             this._$popupContent.scrollTop(0);
             this._popupOpen = true;
         }
-    };
+    }
     /**
      *
      * @param  pixel - the ol pixel
      * @returns  feature layer properties
      * @private
      */
-    MapPopupCls.prototype._featuresAtPixel = function (pixel) {
-        var _this = this;
-        var layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-            var hasLyr = false;
-            var j;
-            var lyr = null;
-            for (j = 0; j < _this._arrPopupLayers.length; j++) {
-                lyr = _this._arrPopupLayers[j];
+    _featuresAtPixel(pixel) {
+        let layerFeatureObjectArray = [];
+        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {
+            let hasLyr = false;
+            let j;
+            let lyr = null;
+            for (j = 0; j < this._arrPopupLayers.length; j++) {
+                lyr = this._arrPopupLayers[j];
                 if (lyr.olLayer === layer) {
                     hasLyr = true;
                     break;
                 }
             }
             if (hasLyr) {
-                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, lyr, j, _this._selectionLayers[j]));
+                layerFeatureObjectArray.push(new FeatureLayerProperties(feature, lyr, j, this._selectionLayers[j]));
             }
         });
         return layerFeatureObjectArray;
-    };
-    MapPopupCls.prototype.closePopup = function () {
+    }
+    closePopup() {
         this._checkInit();
         this._popupOpen = false;
         this._popupOverlay.setPosition(undefined);
@@ -317,15 +292,15 @@ var MapPopupCls = /** @class */ (function (_super) {
         this.clearSelection();
         this._$popupContent.html('');
         return false;
-    };
+    }
     ;
     /**
      *
      * @param chgFunction - popup change function
      */
-    MapPopupCls.prototype.addPopupChangedFunction = function (chgFunction) {
+    addPopupChangedFunction(chgFunction) {
         this._popupChangedFunctions.push(chgFunction);
-    };
+    }
     /**
      *
      * @param {LayerBase|*} lyr - the layer being acted on
@@ -336,12 +311,12 @@ var MapPopupCls = /** @class */ (function (_super) {
      * @returns  the new selection layer
      * @private
      */
-    MapPopupCls.prototype._addPopupLayer = function (lyr, selectionStyle) {
+    _addPopupLayer(lyr, selectionStyle) {
         this._checkInit();
         selectionStyle = selectionStyle || {};
         selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
         selectionStyle.width = selectionStyle.width || 10;
-        var theStyle;
+        let theStyle;
         if (selectionStyle.olStyle) {
             theStyle = selectionStyle.olStyle;
         }
@@ -361,7 +336,7 @@ var MapPopupCls = /** @class */ (function (_super) {
                 })
             });
         }
-        var selectionLayer = new Vector_1.default({
+        let selectionLayer = new Vector_1.default({
             source: new Vector_2.default(),
             style: theStyle
         });
@@ -370,7 +345,7 @@ var MapPopupCls = /** @class */ (function (_super) {
         this._selectionLayerLookup[lyr.id] = selectionLayer;
         this.map.addLayer(selectionLayer);
         return selectionLayer;
-    };
+    }
     /**
      * Add popup to the map
      * @param {LayerBase|*} lyr The layer that the popup with act on
@@ -381,21 +356,21 @@ var MapPopupCls = /** @class */ (function (_super) {
      * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
      * @returns {object} a reference to the ol selection layer
      */
-    MapPopupCls.prototype.addVectorPopup = function (lyr, popupContentFunction, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
+    addVectorPopup(lyr, popupContentFunction, selectionStyle) {
+        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);
         this._arrPopupLayerIds.push(lyr.id);
         this._arrPopupLayers.push(lyr);
         // this._arrPopupOlLayers.push(lyr.olLayer);
         this._arrPopupContentFunction.push(popupContentFunction);
         return selectionLayer;
-    };
+    }
     ;
     /**
      *
      * @param {LayerBase} lyr - layer
      */
-    MapPopupCls.prototype.removeVectorPopup = function (lyr) {
-        var idx = this._arrPopupLayerIds.indexOf(lyr.id);
+    removeVectorPopup(lyr) {
+        let idx = this._arrPopupLayerIds.indexOf(lyr.id);
         if (idx > -1) {
             this._arrPopupLayerIds.splice(idx, 1);
             this._arrPopupLayers.splice(idx, 1);
@@ -404,7 +379,7 @@ var MapPopupCls = /** @class */ (function (_super) {
             this._selectionLayers.splice(idx, 1);
             delete this._selectionLayerLookup[lyr.id];
         }
-    };
+    }
     /**
      *
      * @param {LayerEsriMapServer} lyr - map server layer
@@ -414,31 +389,29 @@ var MapPopupCls = /** @class */ (function (_super) {
      * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
      * @returns {object} a reference to the ol selection layer
      */
-    MapPopupCls.prototype.addMapServicePopup = function (lyr, selectionStyle) {
-        var selectionLayer = this._addPopupLayer(lyr, { olStyle: selectionStyle });
+    addMapServicePopup(lyr, selectionStyle) {
+        let selectionLayer = this._addPopupLayer(lyr, { olStyle: selectionStyle });
         this._esriMapServiceLayers.push(lyr);
         return selectionLayer;
-    };
-    MapPopupCls.prototype.clearSelection = function () {
+    }
+    clearSelection() {
         this._checkInit();
-        for (var i = 0; i < this._selectionLayers.length; i++) {
+        for (let i = 0; i < this._selectionLayers.length; i++) {
             this._selectionLayers[i].getSource().clear();
         }
-        for (var _i = 0, _a = this._mapClickFunctions; _i < _a.length; _i++) {
-            var f = _a[_i];
+        for (let f of this._mapClickFunctions) {
             f();
         }
-    };
+    }
     ;
     /**
      * Add a function to be called when the map is clicked but before any popups are implemented
      * @param {function} func - the map click function
      */
-    MapPopupCls.prototype.addMapClickFunction = function (func) {
+    addMapClickFunction(func) {
         this._mapClickFunctions.push(func);
-    };
-    return MapPopupCls;
-}(mapInteractionBase_1.default));
+    }
+}
 exports.MapPopupCls = MapPopupCls;
 nm.MapPopupCls = MapPopupCls;
 exports.default = MapPopupCls;
diff --git a/dist/olHelpers/mapPopupCls.js.map b/dist/olHelpers/mapPopupCls.js.map
index 288b0fc..e77b1b2 100644
--- a/dist/olHelpers/mapPopupCls.js.map
+++ b/dist/olHelpers/mapPopupCls.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src/olHelpers/mapPopupCls.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport {LayerBase} from \"../layers/LayerBase\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nimport Vector from 'ol/layer/Vector';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Feature from 'ol/Feature';\r\nimport Overlay from 'ol/Overlay';\r\nimport * as easing from 'ol/easing';\r\n\r\n\r\nimport {Style, Circle, Fill, Stroke} from 'ol/style';\r\n\r\n\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: [number, number];\r\n    pixel: [number, number];\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: [number, number];\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: {[s: string]: Vector};\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayers = [];\r\n        // this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param  theMap - the ol map\r\n     */\r\n    init(theMap: Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return easing['inAndOut'](n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'] as [number, number];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel'] as [number, number]);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n\r\n            let hit = false;\r\n\r\n            this.map.forEachFeatureAtPixel(pixel, (f, l) => {\r\n                if (hit) {\r\n                    return;\r\n                }\r\n\r\n                for (let vLyr of this._arrPopupLayers){\r\n                    if (vLyr.olLayer == l){\r\n                        hit = true;\r\n                        break;\r\n                    }\r\n                }\r\n            });\r\n\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: [number, number]): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray: FeatureLayerProperties[] = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: Feature, layer: Vector) => {\r\n            let hasLyr = false;\r\n\r\n            let j;\r\n            let lyr = null;\r\n\r\n            for (j = 0; j < this._arrPopupLayers.length; j++){\r\n                lyr = this._arrPopupLayers[j];\r\n\r\n                if (lyr.olLayer === layer){\r\n                    hasLyr = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (hasLyr) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, lyr, j, this._selectionLayers[j]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        (this._$popupCloser[0] as HTMLSpanElement).blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector|LayerEsriMapServer, selectionStyle: {color?: string, width?: number, olStyle?: Style}): Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new Style({\r\n                stroke: new Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new Circle({\r\n                    radius: 7,\r\n                    fill: new Fill({color: selectionStyle.color}),\r\n                    stroke: new Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new Vector(\r\n            {\r\n                source: new VectorSource(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayers.push(lyr);\r\n        // this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr: LayerBaseVector) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            // this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr: LayerEsriMapServer, selectionStyle?: Style|Style[]) {\r\n        let selectionLayer = this._addPopupLayer(lyr, {olStyle: (selectionStyle as Style)});\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapPopupCls.js","sourceRoot":"","sources":["../../src/olHelpers/mapPopupCls.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6DAAsD;AAEtD,6CAAsC;AAItC,4BAA6B;AAE7B,4CAAqC;AACrC,6CAA4C;AAE5C,wCAAiC;AACjC,oCAAoC;AAGpC,oCAAqD;AAIrD,MAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AA0BhC,MAAa,sBAAsB;IAS/B;;;;;;;OAOG;IACH,YAAY,OAAgB,EAAE,KAAyC,EAAE,UAAkB,EAAE,cAAsB,EAAE,aAAsB;QACvI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,OAAO,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IAED,IAAI,SAAS;QACT,IAAI,OAAO,IAAI,CAAC,aAAa,IAAI,QAAQ,EAAE;YACvC,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;aAAM;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B;IACL,CAAC;CACJ;AAjCD,wDAiCC;AAED;;;GAGG;AACH,MAAa,WAAY,SAAQ,4BAAkB;IAmB/C;;;;;OAKG;IAGH;;OAEG;IACH;QACI,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,+BAA+B;QAC/B,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAE7B,gEAAgE;QAChE,sCAAsC;QACtC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAEhC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;QAExC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;IAEjC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,MAAW;QACZ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC;QACT,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAElC,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;YAC3B,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;SAC1B;aACI;YACD,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;SACpB;QAED,IAAI,CAAC,MAAM,CACP,wBAAwB;YACxB,wCAAwC;YACxC,mCAAmC;YACnC,QAAQ,CACX,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEnD,IAAI,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE;YAC9B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;QAGF,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAO,CAAC;YAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,IAAI;YACb,gBAAgB,EAAE;gBACd,QAAQ,EAAE,GAAG;gBACb,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE;gBACpC,MAAM,EAAE,KAAK;aAChB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEzC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YAEhC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAqB,CAAC;YAE9D,0BAA0B;YAC1B,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAEvC,IAAI,WAAW,GAAG;oBACd,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrC,YAAY,EAAE,mBAAmB;oBACjC,MAAM,EAAE,KAAK;oBACb,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/D,SAAS,EAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAc,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC3F,YAAY,EAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;oBACjE,cAAc,EAAE,IAAI;oBACpB,SAAS,EAAE,EAAE;oBACb,CAAC,EAAE,OAAO;iBACb,CAAC;gBAEF,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBACtC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;iBAC/B;aACJ;YAED,IAAI,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAqB,CAAC,CAAC;YAEtF,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrD,IAAI,OAAO,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;gBAEzC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAE5C,IAAI,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEzG,0BAA0B;gBAC1B,IAAI,oBAAoB,KAAK,KAAK,EAAE;oBAChC,WAAW;iBACd;qBAAM,IAAI,OAAO,oBAAoB,IAAI,QAAQ,EAAE;oBAChD,OAAO,CAAC,YAAY,GAAG,oBAA8B,CAAC;oBACtD,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACpD;qBAAM;oBACH,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAClE;aACJ;YAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC;YAErE,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;YAE7B,IAAI,SAAS,GAAG,4BAA4B,CAAC;YAC7C,SAAS,IAAI,gEAAgE,CAAC;YAC9E,SAAS,IAAI,4DAA4D,CAAC;YAC1E,SAAS,IAAI,4EAA4E,CAAC;YAC1F,SAAS,IAAI,6BAA6B,CAAC;YAC3C,SAAS,IAAI,iEAAiE,IAAI,CAAC,mBAAmB,SAAS,CAAC;YAChH,SAAS,IAAI,wCAAwC,CAAC;YACtD,SAAS,IAAI,gDAAgD,CAAC;YAC9D,SAAS,IAAI,QAAQ,CAAC;YACtB,SAAS,IAAI,8BAA8B,CAAC;YAE5C,SAAS,IAAI,QAAQ,CAAC;YAEtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnD,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,EAAE;oBAC/B,OAAO;iBACV;gBAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE;oBAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;iBAC1D;qBAAM;oBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;iBAC7B;gBACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAExD,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjB,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAAE;oBAC/D,OAAO;iBACV;gBAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE;oBACzD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;iBAC/B;qBAAM;oBACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;iBAC7B;gBACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAGH,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE;gBAC9B,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACtD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;QACL,CAAC,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;YAEhC,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE;gBACjB,OAAO;aACV;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YAEzD,IAAI,GAAG,GAAG,KAAK,CAAC;YAEhB,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,GAAG,EAAE;oBACL,OAAO;iBACV;gBAED,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAC;oBAClC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAC;wBAClB,GAAG,GAAG,IAAI,CAAC;wBACX,MAAM;qBACT;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAiB,CAAC;YAC5D,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,kBAAkB;QACd,IAAI,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrF,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9D,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3E,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,UAAU,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7E,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC1C,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrE,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;YACvC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC1B;IACL,CAAC;IAGD;;;;;;OAMG;IACH,yBAAyB,CAAC,OAAgB,EAAE,GAAuB,EAAE,YAAoB,EAAE,QAAgB;QAEvG,IAAI,eAAe,GAAG,IAAI,sBAAsB,CAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CACvF,CAAC;QACF,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;QAE5C,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEzD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC1B;IACL,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,KAAuB;QACpC,IAAI,uBAAuB,GAA6B,EAAE,CAAC;QAE3D,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,OAAgB,EAAE,KAAa,EAAE,EAAE;YACtE,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,IAAI,CAAC,CAAC;YACN,IAAI,GAAG,GAAG,IAAI,CAAC;YAEf,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;gBAC7C,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAC;oBACtB,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;iBACT;aACJ;YAED,IAAI,MAAM,EAAE;gBACR,uBAAuB,CAAC,IAAI,CACxB,IAAI,sBAAsB,CACtB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,UAAU;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAqB,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7B,OAAO,KAAK,CAAC;IACjB,CAAC;IAAA,CAAC;IAGF;;;OAGG;IACH,uBAAuB,CAAC,WAAiC;QACrD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAuC,EAAE,cAAiE;QACrH,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,cAAc,GAAG,cAAc,IAAI,EAAE,CAAC;QACtC,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,qBAAqB,CAAC;QACrE,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QAElD,IAAI,QAAQ,CAAC;QAEb,IAAI,cAAc,CAAC,OAAO,EAAE;YACxB,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC;SACrC;aAAM;YACH,QAAQ,GAAG,IAAI,aAAK,CAAC;gBACjB,MAAM,EAAE,IAAI,cAAM,CAAC;oBACf,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,KAAK,EAAE,cAAc,CAAC,KAAK;iBAC9B,CAAC;gBACF,KAAK,EAAE,IAAI,cAAM,CAAC;oBACd,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,IAAI,YAAI,CAAC,EAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAC,CAAC;oBAC7C,MAAM,EAAE,IAAI,cAAM,CAAC,EAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;iBAC9D,CAAC;gBACF,IAAI,EAAE,YAAI,CAAC;oBACP,KAAK,EAAE,cAAc,CAAC,KAAK;iBAC9B,CAAC;aACL,CAAC,CAAC;SACN;QAED,IAAI,cAAc,GAAG,IAAI,gBAAM,CAC3B;YACI,MAAM,EAAE,IAAI,gBAAY,EAAE;YAC1B,KAAK,EAAE,QAAQ;SAClB,CACJ,CAAC;QAEF,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAElC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAGD;;;;;;;;;OASG;IACH,cAAc,CAAC,GAAoB,EAAE,oBAAmC,EACzD,cAAkE;QAC7E,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,4CAA4C;QAC5C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEzD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAAA,CAAC;IAGF;;;OAGG;IACH,iBAAiB,CAAC,GAAoB;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEjD,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpC,yCAAyC;YACzC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC7C;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,kBAAkB,CAAC,GAAuB,EAAE,cAA8B;QACtE,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,EAAC,OAAO,EAAG,cAAwB,EAAC,CAAC,CAAC;QACpF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,cAAc,CAAC;IAC1B,CAAC;IAGD,cAAc;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;SAChD;QACD,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACnC,CAAC,EAAE,CAAC;SACP;IACL,CAAC;IAAA,CAAC;IAEF;;;OAGG;IACH,mBAAmB,CAAC,IAAc;QAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACJ;AAvdD,kCAudC;AACD,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC;AAC7B,kBAAe,WAAW,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport {LayerBaseVector} from \"../layers/LayerBaseVector\";\r\nimport {LayerBase} from \"../layers/LayerBase\";\r\nimport LayerEsriMapServer from \"../layers/LayerEsriMapServer\";\r\nimport $ = require('jquery');\r\nimport Map from 'ol/Map';\r\nimport Vector from 'ol/layer/Vector';\r\nimport VectorSource from 'ol/source/Vector';\r\nimport Feature from 'ol/Feature';\r\nimport Overlay from 'ol/Overlay';\r\nimport * as easing from 'ol/easing';\r\n\r\n\r\nimport {Style, Circle, Fill, Stroke} from 'ol/style';\r\n\r\n\r\n\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface popupChangedFunction {\r\n    ($popContent: JQuery): any;\r\n}\r\n\r\n/**\r\n *\r\n */\r\nexport interface popupCallback {\r\n    /**\r\n     * Callback function for the popup\r\n     * @param featureProperties\r\n     * @param jqRef\r\n     */\r\n    (featureProperties: Object, jqRef?: JQuery): string | boolean;\r\n}\r\n\r\ninterface mapEvent {\r\n    coordinate: [number, number];\r\n    pixel: [number, number];\r\n    dragging: boolean|any;\r\n    originalEvent: Event;\r\n}\r\n\r\n\r\nexport class FeatureLayerProperties {\r\n\r\n    feature: Feature;\r\n    layer: LayerBaseVector|LayerEsriMapServer;\r\n    layerIndex: number;\r\n    selectionLayer: Vector;\r\n    popupContent: string;\r\n    esriLayerName: string;\r\n\r\n    /**\r\n     *\r\n     * @param feature the feature\r\n     * @param layer - the layer in the popup\r\n     * @param layerIndex - index of the layer\r\n     * @param selectionLayer - the ol selection layer\r\n     * @param [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature: Feature, layer: LayerBaseVector|LayerEsriMapServer, layerIndex: number, selectionLayer: Vector, esriLayerName?: string) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nexport class MapPopupCls extends MapInteractionBase {\r\n    private _popupOpen: boolean;\r\n    private _passThroughLayerFeatureArray: Array<FeatureLayerProperties>;\r\n    private _currentPopupIndex: number;\r\n    private _popupContentLength: number;\r\n    private _esriMapServiceLayers: Array<LayerEsriMapServer>;\r\n    private _$popupCloser: JQuery;\r\n    private _$popupContent: JQuery;\r\n    private _$popupContainer: JQuery;\r\n    private _popupOverlay: Overlay;\r\n    private _arrPopupLayers: Array<LayerBaseVector>;\r\n    private _popupCoordinate: [number, number];\r\n    private _popupChangedFunctions: Array<popupChangedFunction>;\r\n    private _mapClickFunctions: Array<Function>;\r\n    private _selectionLayerLookup: {[s: string]: Vector};\r\n    private _arrPopupLayerIds: Array<string>;\r\n    private _arrPopupContentFunction: Array<popupCallback>;\r\n    private _selectionLayers: Array<Vector>;\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayers = [];\r\n        // this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param  theMap - the ol map\r\n     */\r\n    init(theMap: Map) {\r\n        super.init(theMap);\r\n\r\n        let $map;\r\n        let target = this.map.getTarget();\r\n\r\n        if (typeof target == 'string') {\r\n            $map = $('#' + target);\r\n        }\r\n        else {\r\n            $map = $(target);\r\n        }\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<span class=\"ol-popup-closer\">X</span>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        let _ease = (n: number): number => {\r\n            return easing['inAndOut'](n);\r\n        };\r\n\r\n\r\n        this._popupOverlay = new Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250,\r\n                source: theMap.getView().getCenter(),\r\n                easing: _ease\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click((evt) => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n\r\n            this.closePopup();\r\n            this._popupCoordinate = evt['coordinate'] as [number, number];\r\n\r\n            // esri map service layers\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n\r\n                let queryParams = {\r\n                    geometry: evt['coordinate'].join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: (this._map.getView().calculateExtent(this._map.getSize()) as number[]).join(','),\r\n                    imageDisplay: (this._map.getSize() as number[]).join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt['pixel'] as [number, number]);\r\n\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse as string;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (evt) => {\r\n\r\n            if (evt['dragging']) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(evt['originalEvent']);\r\n\r\n            let hit = false;\r\n\r\n            this.map.forEachFeatureAtPixel(pixel, (f, l) => {\r\n                if (hit) {\r\n                    return;\r\n                }\r\n\r\n                for (let vLyr of this._arrPopupLayers){\r\n                    if (vLyr.olLayer == l){\r\n                        hit = true;\r\n                        break;\r\n                    }\r\n                }\r\n            });\r\n\r\n            let mapElement = this.map.getTargetElement() as HTMLElement;\r\n            mapElement.style.cursor = hit ? 'pointer' : '';\r\n        });\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature: Feature, lyr: LayerEsriMapServer, popupContent: string, esriName: string) {\r\n\r\n        let featLayerObject = new FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param  pixel - the ol pixel\r\n     * @returns  feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel: [number, number]): Array<FeatureLayerProperties> {\r\n        let layerFeatureObjectArray: FeatureLayerProperties[] = [];\r\n\r\n        this.map.forEachFeatureAtPixel(pixel, (feature: Feature, layer: Vector) => {\r\n            let hasLyr = false;\r\n\r\n            let j;\r\n            let lyr = null;\r\n\r\n            for (j = 0; j < this._arrPopupLayers.length; j++){\r\n                lyr = this._arrPopupLayers[j];\r\n\r\n                if (lyr.olLayer === layer){\r\n                    hasLyr = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (hasLyr) {\r\n                layerFeatureObjectArray.push(\r\n                    new FeatureLayerProperties(\r\n                        feature, lyr, j, this._selectionLayers[j]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        (this._$popupCloser[0] as HTMLSpanElement).blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction: popupChangedFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns  the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr: LayerBaseVector|LayerEsriMapServer, selectionStyle: {color?: string, width?: number, olStyle?: Style}): Vector {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new Style({\r\n                stroke: new Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new Circle({\r\n                    radius: 7,\r\n                    fill: new Fill({color: selectionStyle.color}),\r\n                    stroke: new Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new Vector(\r\n            {\r\n                source: new VectorSource(),\r\n                style: theStyle\r\n            }\r\n        );\r\n\r\n        selectionLayer.setZIndex(100);\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr: LayerBaseVector, popupContentFunction: popupCallback,\r\n                   selectionStyle?: {color?: string, width?: number, olStyle?: Style}) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayers.push(lyr);\r\n        // this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr: LayerBaseVector) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            // this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr: LayerEsriMapServer, selectionStyle?: Style|Style[]) {\r\n        let selectionLayer = this._addPopupLayer(lyr, {olStyle: (selectionStyle as Style)});\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func: Function) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/mapToBase64.js b/dist/olHelpers/mapToBase64.js
index b2da64e..41a0209 100644
--- a/dist/olHelpers/mapToBase64.js
+++ b/dist/olHelpers/mapToBase64.js
@@ -1,6 +1,6 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var extentUtil_1 = require("../olHelpers/extentUtil");
+const extentUtil_1 = require("../olHelpers/extentUtil");
 function mapToBase64(map, callback, options) {
     options = options || {};
     if (typeof options.delay === 'number') {
@@ -12,28 +12,28 @@ function mapToBase64(map, callback, options) {
     else {
         options.delay = 1;
     }
-    var mapTarget = map.getTargetElement();
-    var originalHeight = mapTarget.style.height;
-    var originalWidth = mapTarget.style.width;
-    var originalPosition = mapTarget.style.position;
-    var originalCenter = map.getView().getCenter();
-    var originalZoom = map.getView().getZoom();
+    let mapTarget = map.getTargetElement();
+    let originalHeight = mapTarget.style.height;
+    let originalWidth = mapTarget.style.width;
+    let originalPosition = mapTarget.style.position;
+    let originalCenter = map.getView().getCenter();
+    let originalZoom = map.getView().getZoom();
     // let mapTimeout = 1;
     if (options.resize) {
-        mapTarget.style.height = options.resize.height + "px";
-        mapTarget.style.width = options.resize.width + "px";
+        mapTarget.style.height = `${options.resize.height}px`;
+        mapTarget.style.width = `${options.resize.width}px`;
         mapTarget.style.position = 'absolute';
         map.updateSize();
     }
-    map.once('postrender', function () {
+    map.once('postrender', () => {
         if (options.layers) {
             extentUtil_1.fitToMap(options.layers, map);
         }
-        setTimeout(function () {
-            map.once('postcompose', function (event) {
+        setTimeout(() => {
+            map.once('postcompose', (event) => {
                 try {
-                    var canvas = event['context'].canvas;
-                    var imgData = canvas.toDataURL('image/png');
+                    let canvas = event['context'].canvas;
+                    let imgData = canvas.toDataURL('image/png');
                     callback(imgData);
                 }
                 catch (ex) {
diff --git a/dist/olHelpers/mapToBase64.js.map b/dist/olHelpers/mapToBase64.js.map
index 23e1092..a3f3c68 100644
--- a/dist/olHelpers/mapToBase64.js.map
+++ b/dist/olHelpers/mapToBase64.js.map
@@ -1 +1 @@
-{"version":3,"file":"mapToBase64.js","sourceRoot":"","sources":["../../src/olHelpers/mapToBase64.ts"],"names":[],"mappings":";;AACA,sDAAiD;AAcjD,SAAgB,WAAW,CAAC,GAAQ,EAAE,QAAkC,EAAE,OAA6B;IACnG,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;QACnC,MAAM;KACT;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;QACzC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;KACxB;SAAM;QACH,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;KACrB;IAED,IAAI,SAAS,GAAmB,GAAG,CAAC,gBAAgB,EAAoB,CAAC;IAEzE,IAAI,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1C,IAAI,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;IAChD,IAAI,cAAc,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC;IAC/C,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3C,sBAAsB;IAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,MAAM,GAAM,OAAO,CAAC,MAAM,CAAC,MAAM,OAAI,CAAC;QACtD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAM,OAAO,CAAC,MAAM,CAAC,KAAK,OAAI,CAAC;QACpD,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACtC,GAAG,CAAC,UAAU,EAAE,CAAC;KACpB;IAED,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;QAEnB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,qBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,UAAU,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,UAAC,KAAK;gBAC1B,IAAI;oBACA,IAAI,MAAM,GAAsB,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;oBACxD,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;oBAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACrB;gBACD,OAAO,EAAE,EAAE;oBACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,kCAAkC;iBACrC;wBAAS;oBACN,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;wBACxC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;wBAE5C,GAAG,CAAC,UAAU,EAAE,CAAC;wBACjB,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBACxC,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;qBACvC;oBAED,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,qBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;qBACjC;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,UAAU,EAAE,CAAC;AACrB,CAAC;AAjED,kCAiEC;AAED,kBAAe,WAAW,CAAC","sourcesContent":["import {LayerBaseVector} from \"../layers\";\r\nimport {fitToMap} from '../olHelpers/extentUtil';\r\n// import {layers} from \"../\";\r\nimport Map from 'ol/Map';\r\n\r\ndeclare const glob: Object;\r\n\r\nexport interface iMapToBase64Options {\r\n    resize?: { width: number, height: number };\r\n    layers?: LayerBaseVector[] | LayerBaseVector[];\r\n    delay?: number;\r\n}\r\n\r\n\r\n\r\nexport function mapToBase64(map: Map, callback: (imgData: string) => any, options?: iMapToBase64Options): any {\r\n    options = options || {};\r\n\r\n    if (typeof options.delay === 'number') {\r\n        //pass\r\n    } else if (options.layers || options.resize) {\r\n        options.delay = 2000;\r\n    } else {\r\n        options.delay = 1;\r\n    }\r\n\r\n    let mapTarget: HTMLDivElement = map.getTargetElement() as HTMLDivElement;\r\n\r\n    let originalHeight = mapTarget.style.height;\r\n    let originalWidth = mapTarget.style.width;\r\n    let originalPosition = mapTarget.style.position;\r\n    let originalCenter = map.getView().getCenter();\r\n    let originalZoom = map.getView().getZoom();\r\n\r\n    // let mapTimeout = 1;\r\n\r\n    if (options.resize) {\r\n        mapTarget.style.height = `${options.resize.height}px`;\r\n        mapTarget.style.width = `${options.resize.width}px`;\r\n        mapTarget.style.position = 'absolute';\r\n        map.updateSize();\r\n    }\r\n\r\n    map.once('postrender', () => {\r\n\r\n        if (options.layers) {\r\n            fitToMap(options.layers, map);\r\n        }\r\n\r\n        setTimeout(() => {\r\n            map.once('postcompose', (event) => {\r\n                try {\r\n                    let canvas: HTMLCanvasElement = event['context'].canvas;\r\n                    let imgData = canvas.toDataURL('image/png');\r\n                    callback(imgData);\r\n                }\r\n                catch (ex) {\r\n                    console.log(ex);\r\n                    // reportParams['imgData'] = null;\r\n                } finally {\r\n                    if (options.resize) {\r\n                        mapTarget.style.height = originalHeight;\r\n                        mapTarget.style.width = originalWidth;\r\n                        mapTarget.style.position = originalPosition;\r\n\r\n                        map.updateSize();\r\n                        map.getView().setCenter(originalCenter);\r\n                        map.getView().setZoom(originalZoom);\r\n                    }\r\n\r\n                    if (options.layers) {\r\n                        fitToMap(options.layers, map);\r\n                    }\r\n                }\r\n            });\r\n            map.renderSync();\r\n        }, options.delay);\r\n    });\r\n\r\n    map.updateSize();\r\n}\r\n\r\nexport default mapToBase64;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"mapToBase64.js","sourceRoot":"","sources":["../../src/olHelpers/mapToBase64.ts"],"names":[],"mappings":";;AACA,wDAAiD;AAcjD,SAAgB,WAAW,CAAC,GAAQ,EAAE,QAAkC,EAAE,OAA6B;IACnG,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;QACnC,MAAM;KACT;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;QACzC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;KACxB;SAAM;QACH,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;KACrB;IAED,IAAI,SAAS,GAAmB,GAAG,CAAC,gBAAgB,EAAoB,CAAC;IAEzE,IAAI,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5C,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1C,IAAI,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;IAChD,IAAI,cAAc,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC;IAC/C,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3C,sBAAsB;IAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;QAChB,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;QACtD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QACpD,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACtC,GAAG,CAAC,UAAU,EAAE,CAAC;KACpB;IAED,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QAExB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,qBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SACjC;QAED,UAAU,CAAC,GAAG,EAAE;YACZ,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI;oBACA,IAAI,MAAM,GAAsB,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;oBACxD,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;oBAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACrB;gBACD,OAAO,EAAE,EAAE;oBACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,kCAAkC;iBACrC;wBAAS;oBACN,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;wBACxC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;wBACtC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;wBAE5C,GAAG,CAAC,UAAU,EAAE,CAAC;wBACjB,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBACxC,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;qBACvC;oBAED,IAAI,OAAO,CAAC,MAAM,EAAE;wBAChB,qBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;qBACjC;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,UAAU,EAAE,CAAC;AACrB,CAAC;AAjED,kCAiEC;AAED,kBAAe,WAAW,CAAC","sourcesContent":["import {LayerBaseVector} from \"../layers\";\r\nimport {fitToMap} from '../olHelpers/extentUtil';\r\n// import {layers} from \"../\";\r\nimport Map from 'ol/Map';\r\n\r\ndeclare const glob: Object;\r\n\r\nexport interface iMapToBase64Options {\r\n    resize?: { width: number, height: number };\r\n    layers?: LayerBaseVector[] | LayerBaseVector[];\r\n    delay?: number;\r\n}\r\n\r\n\r\n\r\nexport function mapToBase64(map: Map, callback: (imgData: string) => any, options?: iMapToBase64Options): any {\r\n    options = options || {};\r\n\r\n    if (typeof options.delay === 'number') {\r\n        //pass\r\n    } else if (options.layers || options.resize) {\r\n        options.delay = 2000;\r\n    } else {\r\n        options.delay = 1;\r\n    }\r\n\r\n    let mapTarget: HTMLDivElement = map.getTargetElement() as HTMLDivElement;\r\n\r\n    let originalHeight = mapTarget.style.height;\r\n    let originalWidth = mapTarget.style.width;\r\n    let originalPosition = mapTarget.style.position;\r\n    let originalCenter = map.getView().getCenter();\r\n    let originalZoom = map.getView().getZoom();\r\n\r\n    // let mapTimeout = 1;\r\n\r\n    if (options.resize) {\r\n        mapTarget.style.height = `${options.resize.height}px`;\r\n        mapTarget.style.width = `${options.resize.width}px`;\r\n        mapTarget.style.position = 'absolute';\r\n        map.updateSize();\r\n    }\r\n\r\n    map.once('postrender', () => {\r\n\r\n        if (options.layers) {\r\n            fitToMap(options.layers, map);\r\n        }\r\n\r\n        setTimeout(() => {\r\n            map.once('postcompose', (event) => {\r\n                try {\r\n                    let canvas: HTMLCanvasElement = event['context'].canvas;\r\n                    let imgData = canvas.toDataURL('image/png');\r\n                    callback(imgData);\r\n                }\r\n                catch (ex) {\r\n                    console.log(ex);\r\n                    // reportParams['imgData'] = null;\r\n                } finally {\r\n                    if (options.resize) {\r\n                        mapTarget.style.height = originalHeight;\r\n                        mapTarget.style.width = originalWidth;\r\n                        mapTarget.style.position = originalPosition;\r\n\r\n                        map.updateSize();\r\n                        map.getView().setCenter(originalCenter);\r\n                        map.getView().setZoom(originalZoom);\r\n                    }\r\n\r\n                    if (options.layers) {\r\n                        fitToMap(options.layers, map);\r\n                    }\r\n                }\r\n            });\r\n            map.renderSync();\r\n        }, options.delay);\r\n    });\r\n\r\n    map.updateSize();\r\n}\r\n\r\nexport default mapToBase64;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/projections.js b/dist/olHelpers/projections.js
index 9ab9d7f..c6744b7 100644
--- a/dist/olHelpers/projections.js
+++ b/dist/olHelpers/projections.js
@@ -3,7 +3,7 @@
  * Created by gavorhes on 10/3/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var Projection_1 = require("ol/proj/Projection");
+const Projection_1 = require("ol/proj/Projection");
 exports.proj4326 = new Projection_1.default({ code: 'EPSG:4326' });
 exports.proj3857 = new Projection_1.default({ code: 'EPSG:3857' });
 exports.proj3070 = new Projection_1.default({ code: 'EPSG:3070' });
diff --git a/dist/olHelpers/projections.js.map b/dist/olHelpers/projections.js.map
index ccb51f3..ab1b914 100644
--- a/dist/olHelpers/projections.js.map
+++ b/dist/olHelpers/projections.js.map
@@ -1 +1 @@
-{"version":3,"file":"projections.js","sourceRoot":"","sources":["../../src/olHelpers/projections.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,iDAA4C;AAG/B,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;AAC/C,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;AAC/C,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 10/3/2016.\r\n */\r\n\r\nimport Projection from 'ol/proj/Projection';\r\n\r\n\r\nexport const proj4326 = new Projection({code: 'EPSG:4326'});\r\nexport const proj3857 = new Projection({code: 'EPSG:3857'});\r\nexport const proj3070 = new Projection({code: 'EPSG:3070'});\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"projections.js","sourceRoot":"","sources":["../../src/olHelpers/projections.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,mDAA4C;AAG/B,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;AAC/C,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;AAC/C,QAAA,QAAQ,GAAG,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 10/3/2016.\r\n */\r\n\r\nimport Projection from 'ol/proj/Projection';\r\n\r\n\r\nexport const proj4326 = new Projection({code: 'EPSG:4326'});\r\nexport const proj3857 = new Projection({code: 'EPSG:3857'});\r\nexport const proj3070 = new Projection({code: 'EPSG:3070'});\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/propertiesZoomStyle.js b/dist/olHelpers/propertiesZoomStyle.js
index 60e8a59..c222ef9 100644
--- a/dist/olHelpers/propertiesZoomStyle.js
+++ b/dist/olHelpers/propertiesZoomStyle.js
@@ -3,9 +3,9 @@
  * Created by gavorhes on 12/14/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var zoomResolutionConvert = require("./zoomResolutionConvert");
-var nm = provide_1.default('olHelpers');
+const provide_1 = require("../util/provide");
+const zoomResolutionConvert = require("./zoomResolutionConvert");
+const nm = provide_1.default('olHelpers');
 /**
  * A style function based on properties and zoom level, wraps normal feature, resolution function
  * @callback propertiesZoomStyle
diff --git a/dist/olHelpers/propertiesZoomStyle.js.map b/dist/olHelpers/propertiesZoomStyle.js.map
index f7c899e..52d88cc 100644
--- a/dist/olHelpers/propertiesZoomStyle.js.map
+++ b/dist/olHelpers/propertiesZoomStyle.js.map
@@ -1 +1 @@
-{"version":3,"file":"propertiesZoomStyle.js","sourceRoot":"","sources":["../../src/olHelpers/propertiesZoomStyle.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,2CAAsC;AACtC,+DAAiE;AAGjE,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAGhC;;;;;;GAMG;AAEH;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,SAAqD;IAG9E,OAAO,UAAU,OAAgB,EAAE,IAAY;QAC3C,OAAO,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;AACN,CAAC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC7C,kBAAe,mBAAmB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport * as zoomResolutionConvert from './zoomResolutionConvert';\r\nimport Feature from 'ol/Feature';\r\nimport Style from 'ol/style/Style';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * A style function based on properties and zoom level, wraps normal feature, resolution function\r\n * @callback propertiesZoomStyle\r\n * @param {object} properties the feature properties\r\n * @param {number} zoom level\r\n *\r\n */\r\n\r\n/**\r\n * wrapper to define a style function by properties and zoom level\r\n * @param {propertiesZoomStyle|*} styleFunc - style function\r\n * @returns {function|*} new function\r\n */\r\nfunction propertiesZoomStyle(styleFunc: (f: Feature, res: number) => Style|Style[]):\r\n(feature: Feature, zoom: number) => Style|Style[]\r\n{\r\n    return function (feature: Feature, zoom: number): Style|Style[] {\r\n        return styleFunc(feature, zoomResolutionConvert.zoomToResolution(zoom));\r\n    };\r\n}\r\n\r\nnm.propertiesZoomStyle = propertiesZoomStyle;\r\nexport default propertiesZoomStyle;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"propertiesZoomStyle.js","sourceRoot":"","sources":["../../src/olHelpers/propertiesZoomStyle.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6CAAsC;AACtC,iEAAiE;AAGjE,MAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAGhC;;;;;;GAMG;AAEH;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,SAAqD;IAG9E,OAAO,UAAU,OAAgB,EAAE,IAAY;QAC3C,OAAO,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC;AACN,CAAC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC7C,kBAAe,mBAAmB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport * as zoomResolutionConvert from './zoomResolutionConvert';\r\nimport Feature from 'ol/Feature';\r\nimport Style from 'ol/style/Style';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * A style function based on properties and zoom level, wraps normal feature, resolution function\r\n * @callback propertiesZoomStyle\r\n * @param {object} properties the feature properties\r\n * @param {number} zoom level\r\n *\r\n */\r\n\r\n/**\r\n * wrapper to define a style function by properties and zoom level\r\n * @param {propertiesZoomStyle|*} styleFunc - style function\r\n * @returns {function|*} new function\r\n */\r\nfunction propertiesZoomStyle(styleFunc: (f: Feature, res: number) => Style|Style[]):\r\n(feature: Feature, zoom: number) => Style|Style[]\r\n{\r\n    return function (feature: Feature, zoom: number): Style|Style[] {\r\n        return styleFunc(feature, zoomResolutionConvert.zoomToResolution(zoom));\r\n    };\r\n}\r\n\r\nnm.propertiesZoomStyle = propertiesZoomStyle;\r\nexport default propertiesZoomStyle;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/quickMap.js b/dist/olHelpers/quickMap.js
index b818b11..b8d73e4 100644
--- a/dist/olHelpers/quickMap.js
+++ b/dist/olHelpers/quickMap.js
@@ -3,11 +3,11 @@
  * Created by gavorhes on 12/15/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = require("./quickMapBase");
-var provide_1 = require("../util/provide");
-var mapMove_1 = require("./mapMove");
-var mapPopup_1 = require("./mapPopup");
-var nm = provide_1.default('olHelpers');
+const quickMapBase_1 = require("./quickMapBase");
+const provide_1 = require("../util/provide");
+const mapMove_1 = require("./mapMove");
+const mapPopup_1 = require("./mapPopup");
+let nm = provide_1.default('olHelpers');
 /**
  * Sets up a map with some default parameters and initializes
  * mapMove and mapPopup
@@ -24,9 +24,8 @@ var nm = provide_1.default('olHelpers');
  * @param {boolean} [options.fullScreen=false] if add base map switcher
  * @returns {ol.Map} the ol map
  */
-function quickMap(options) {
-    if (options === void 0) { options = {}; }
-    var m = quickMapBase_1.quickMapBase(options);
+function quickMap(options = {}) {
+    let m = quickMapBase_1.quickMapBase(options);
     mapMove_1.default.init(m);
     mapPopup_1.default.init(m);
     return m;
diff --git a/dist/olHelpers/quickMap.js.map b/dist/olHelpers/quickMap.js.map
index bb5175d..74058fe 100644
--- a/dist/olHelpers/quickMap.js.map
+++ b/dist/olHelpers/quickMap.js.map
@@ -1 +1 @@
-{"version":3,"file":"quickMap.js","sourceRoot":"","sources":["../../src/olHelpers/quickMap.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,+CAA6D;AAC7D,2CAAsC;AACtC,qCAAgC;AAChC,uCAAkC;AAClC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAK9B;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,QAAQ,CAAC,OAA8B;IAA9B,wBAAA,EAAA,YAA8B;IACnD,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,CAAC;AACb,CAAC;AALD,4BAKC;AAGD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\nimport Map from 'ol/Map';\r\n\r\nexport {quickMapOptions} from './quickMapBase';\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"quickMap.js","sourceRoot":"","sources":["../../src/olHelpers/quickMap.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,iDAA6D;AAC7D,6CAAsC;AACtC,uCAAgC;AAChC,yCAAkC;AAClC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAK9B;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,QAAQ,CAAC,UAA4B,EAAE;IACnD,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,kBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,CAAC;AACb,CAAC;AALD,4BAKC;AAGD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport {quickMapOptions, quickMapBase} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\nimport Map from 'ol/Map';\r\n\r\nexport {quickMapOptions} from './quickMapBase';\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nexport function quickMap(options : quickMapOptions = {}): Map {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/quickMapBase.js b/dist/olHelpers/quickMapBase.js
index f19e84d..1d901bc 100644
--- a/dist/olHelpers/quickMapBase.js
+++ b/dist/olHelpers/quickMapBase.js
@@ -3,17 +3,17 @@
  * Created by gavorhes on 12/15/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var Map_1 = require("ol/Map");
-var Tile_1 = require("ol/layer/Tile");
-var OSM_1 = require("ol/source/OSM");
-var Point_1 = require("ol/geom/Point");
-var Projection_1 = require("ol/proj/Projection");
-var View_1 = require("ol/View");
-var Fullscreen_1 = require("ol/control/Fullscreen");
-var proj = require("ol/proj");
-var $ = require("jquery");
-var nm = provide_1.default('olHelpers');
+const provide_1 = require("../util/provide");
+const Map_1 = require("ol/Map");
+const Tile_1 = require("ol/layer/Tile");
+const OSM_1 = require("ol/source/OSM");
+const Point_1 = require("ol/geom/Point");
+const Projection_1 = require("ol/proj/Projection");
+const View_1 = require("ol/View");
+const Fullscreen_1 = require("ol/control/Fullscreen");
+const proj = require("ol/proj");
+const $ = require("jquery");
+const nm = provide_1.default('olHelpers');
 /**
  * Sets up a map with some default parameters and initializes
  * mapMove and mapPopup
@@ -30,8 +30,7 @@ var nm = provide_1.default('olHelpers');
  * @param [options.fullScreen=false] if add base map switcher
  * @returns the ol map
  */
-function quickMapBase(options) {
-    if (options === void 0) { options = {}; }
+function quickMapBase(options = {}) {
     options.divId = options.divId || 'map';
     options.center = options.center || { x: -10018378, y: 5574910 };
     options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
@@ -39,12 +38,12 @@ function quickMapBase(options) {
     options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
     options.addGeocode = options.addGeocode || false;
     options.addOsm = typeof options.addOsm === 'undefined' ? true : options.addOsm;
-    var $mapDiv = $('#' + options.divId);
+    let $mapDiv = $('#' + options.divId);
     $mapDiv.css('position', 'relative');
-    var osmLayer = new Tile_1.default({ source: new OSM_1.default() });
+    let osmLayer = new Tile_1.default({ source: new OSM_1.default() });
     // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
+    let osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
+    let aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
     if (options.baseSwitcher) {
         //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
         //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
@@ -68,12 +67,12 @@ function quickMapBase(options) {
         throw 'zoom out of range';
     }
     if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new Point_1.default([options.center.x, options.center.y]);
+        let p = new Point_1.default([options.center.x, options.center.y]);
         // new Projection({code: "EPSG:4326"});
         // let coordinates = transform(p.getCoordinates(), "EPSG:4326", "EPSG:3857");
         // p.transform(new Projection({code: "EPSG:4326"}), new Projection({code: "EPSG:3857"}));
         // let coordinates = p.getCoordinates();
-        var coordinates = proj['transform'](p.getCoordinates(), new Projection_1.default({ code: "EPSG:4326" }), new Projection_1.default({ code: "EPSG:3857" }));
+        let coordinates = proj['transform'](p.getCoordinates(), new Projection_1.default({ code: "EPSG:4326" }), new Projection_1.default({ code: "EPSG:3857" }));
         options.center.x = coordinates[0];
         options.center.y = coordinates[1];
     }
@@ -81,13 +80,13 @@ function quickMapBase(options) {
     //         attributionOptions: {collapsible: false}
     //     }
     // );
-    var view = new View_1.default({
+    const view = new View_1.default({
         center: [options.center.x, options.center.y],
         zoom: options.zoom,
         minZoom: options.minZoom,
         maxZoom: options.maxZoom
     });
-    var map = new Map_1.default({
+    let map = new Map_1.default({
         layers: [],
         target: options.divId,
         // controls: controls,
diff --git a/dist/olHelpers/quickMapBase.js.map b/dist/olHelpers/quickMapBase.js.map
index 36293d1..f6906b9 100644
--- a/dist/olHelpers/quickMapBase.js.map
+++ b/dist/olHelpers/quickMapBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapBase.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport Map from 'ol/Map'\r\nimport Tile from 'ol/layer/Tile';\r\nimport OSM from 'ol/source/OSM';\r\nimport Point from 'ol/geom/Point';\r\nimport Projection from 'ol/proj/Projection';\r\nimport View from 'ol/View';\r\nimport control from 'ol/control';\r\nimport FullScreen from 'ol/control/Fullscreen';\r\nimport * as proj from 'ol/proj';\r\nimport $ = require('jquery');\r\nimport {Geocode} from './geocode';\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n    addGeocode?: boolean;\r\n    addOsm?: boolean\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n    options.addGeocode = options.addGeocode || false;\r\n    options.addOsm = typeof options.addOsm === 'undefined' ? true : options.addOsm;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new Tile({source: new OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new Point([options.center.x, options.center.y]);\r\n        // new Projection({code: \"EPSG:4326\"});\r\n\r\n        // let coordinates = transform(p.getCoordinates(), \"EPSG:4326\", \"EPSG:3857\");\r\n        // p.transform(new Projection({code: \"EPSG:4326\"}), new Projection({code: \"EPSG:3857\"}));\r\n        // let coordinates = p.getCoordinates();\r\n        let coordinates = proj['transform'](p.getCoordinates(), new Projection({code: \"EPSG:4326\"}), new Projection({code: \"EPSG:3857\"}));\r\n\r\n\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    // const controls = control.defaults({\r\n    //         attributionOptions: {collapsible: false}\r\n    //     }\r\n    // );\r\n\r\n    const view = new View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new Map({\r\n        layers: [],\r\n        target: options.divId,\r\n        // controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.addOsm){\r\n        map.addLayer(osmLayer)\r\n    }\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new FullScreen({}));\r\n    }\r\n\r\n    if (options.addGeocode){\r\n        // new Geocode(document.getElementById(options.divId) as HTMLDivElement, map);\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapBase.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6CAAsC;AACtC,gCAAwB;AACxB,wCAAiC;AACjC,uCAAgC;AAChC,yCAAkC;AAClC,mDAA4C;AAC5C,kCAA2B;AAE3B,sDAA+C;AAC/C,gCAAgC;AAChC,4BAA6B;AAE7B,MAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAchC;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,YAAY,CAAC,UAA2B,EAAE;IACtD,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,OAAO,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACzF,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IACjD,OAAO,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAG/E,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpC,IAAI,QAAQ,GAAG,IAAI,cAAI,CAAC,EAAC,MAAM,EAAE,IAAI,aAAG,EAAE,EAAC,CAAC,CAAC;IAC7C,sGAAsG;IAEtG,IAAI,MAAM,GAAG,m0GAAm0G,CAAC;IACj1G,IAAI,SAAS,GAAG,+uIAA+uI,CAAC;IAEhwI,IAAI,OAAO,CAAC,YAAY,EAAE;QACtB,6FAA6F;QAC7F,6FAA6F;QAC7F,+GAA+G;QAC/G,kCAAkC;QAClC,oCAAoC;QACpC,EAAE;QACF,wDAAwD;QACxD,qBAAqB;QACrB,oDAAoD;QACpD,oDAAoD;QACpD,EAAE;QACF,mCAAmC;QACnC,iDAAiD;QACjD,gBAAgB;QAChB,8CAA8C;QAC9C,SAAS;QACT,OAAO;KACV;IAED,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE;QACvC,MAAM,mBAAmB,CAAC;KAC7B;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1G,IAAI,CAAC,GAAG,IAAI,eAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,uCAAuC;QAEvC,6EAA6E;QAC7E,yFAAyF;QACzF,wCAAwC;QACxC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,EAAE,IAAI,oBAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;QAGlI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;KACrC;IAED,sCAAsC;IACtC,mDAAmD;IACnD,QAAQ;IACR,KAAK;IAEL,MAAM,IAAI,GAAG,IAAI,cAAI,CAAC;QAClB,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAC;IAEH,IAAI,GAAG,GAAG,IAAI,aAAG,CAAC;QACd,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,OAAO,CAAC,KAAK;QACrB,sBAAsB;QACtB,IAAI,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,EAAC;QACf,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;KACzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE;QACpB,GAAG,CAAC,UAAU,CAAC,IAAI,oBAAU,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;IAED,IAAI,OAAO,CAAC,UAAU,EAAC;QACnB,8EAA8E;KACjF;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAzFD,oCAyFC;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B,kBAAe,YAAY,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport Map from 'ol/Map'\r\nimport Tile from 'ol/layer/Tile';\r\nimport OSM from 'ol/source/OSM';\r\nimport Point from 'ol/geom/Point';\r\nimport Projection from 'ol/proj/Projection';\r\nimport View from 'ol/View';\r\nimport control from 'ol/control';\r\nimport FullScreen from 'ol/control/Fullscreen';\r\nimport * as proj from 'ol/proj';\r\nimport $ = require('jquery');\r\nimport {Geocode} from './geocode';\r\nconst nm = provide('olHelpers');\r\n\r\nexport interface quickMapOptions {\r\n    divId?: string;\r\n    center?: {x: number, y: number};\r\n    zoom?: number;\r\n    minZoom?: number;\r\n    maxZoom?: number;\r\n    baseSwitcher?: boolean;\r\n    fullScreen?: boolean;\r\n    addGeocode?: boolean;\r\n    addOsm?: boolean\r\n}\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param [options={}] config options\r\n * @param [options.divId=map] map div id\r\n * @param [options.center={}] center config object\r\n * @param [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param [options.center.y=5574910] center y, web mercator y or lat\r\n * @param [options.zoom=7] zoom level\r\n * @param [options.minZoom=undefined] min zoom\r\n * @param [options.maxZoom=undefined] max zoom\r\n * @param [options.baseSwitcher=true] if add base map switcher\r\n * @param [options.fullScreen=false] if add base map switcher\r\n * @returns the ol map\r\n */\r\nexport function quickMapBase(options: quickMapOptions = {}): Map {\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {x: -10018378, y: 5574910};\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n    options.addGeocode = options.addGeocode || false;\r\n    options.addOsm = typeof options.addOsm === 'undefined' ? true : options.addOsm;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new Tile({source: new OSM()});\r\n    // let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        //  let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        //  switcherContent += '\"></div>';\r\n        //  $mapDiv.append(switcherContent);\r\n        //\r\n        // $mapDiv.find('.base-map-switcher').click(function() {\r\n        //      \"use strict\";\r\n        //      osmLayer.setVisible(!osmLayer.getVisible());\r\n        //      satLayer.setVisible(!satLayer.getVisible());\r\n        //\r\n        //      if (osmLayer.getVisible()){\r\n        //          $(this).css('background', aerialCss);\r\n        //      } else {\r\n        //          $(this).css('background', osmCss);\r\n        //      }\r\n        //  });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new Point([options.center.x, options.center.y]);\r\n        // new Projection({code: \"EPSG:4326\"});\r\n\r\n        // let coordinates = transform(p.getCoordinates(), \"EPSG:4326\", \"EPSG:3857\");\r\n        // p.transform(new Projection({code: \"EPSG:4326\"}), new Projection({code: \"EPSG:3857\"}));\r\n        // let coordinates = p.getCoordinates();\r\n        let coordinates = proj['transform'](p.getCoordinates(), new Projection({code: \"EPSG:4326\"}), new Projection({code: \"EPSG:3857\"}));\r\n\r\n\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    // const controls = control.defaults({\r\n    //         attributionOptions: {collapsible: false}\r\n    //     }\r\n    // );\r\n\r\n    const view = new View({\r\n        center: [options.center.x, options.center.y],\r\n        zoom: options.zoom,\r\n        minZoom: options.minZoom,\r\n        maxZoom: options.maxZoom\r\n    });\r\n\r\n    let map = new Map({\r\n        layers: [],\r\n        target: options.divId,\r\n        // controls: controls,\r\n        view: view\r\n    });\r\n\r\n    if (options.addOsm){\r\n        map.addLayer(osmLayer)\r\n    }\r\n\r\n    if (options.fullScreen) {\r\n        map.addControl(new FullScreen({}));\r\n    }\r\n\r\n    if (options.addGeocode){\r\n        // new Geocode(document.getElementById(options.divId) as HTMLDivElement, map);\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/quickMapMulti.js b/dist/olHelpers/quickMapMulti.js
index b44ca35..9c5a182 100644
--- a/dist/olHelpers/quickMapMulti.js
+++ b/dist/olHelpers/quickMapMulti.js
@@ -3,11 +3,11 @@
  * Created by gavorhes on 12/15/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var quickMapBase_1 = require("./quickMapBase");
-var provide_1 = require("../util/provide");
-var mapMoveCls_1 = require("./mapMoveCls");
-var mapPopupCls_1 = require("./mapPopupCls");
-var nm = provide_1.default('olHelpers');
+const quickMapBase_1 = require("./quickMapBase");
+const provide_1 = require("../util/provide");
+const mapMoveCls_1 = require("./mapMoveCls");
+const mapPopupCls_1 = require("./mapPopupCls");
+let nm = provide_1.default('olHelpers');
 /**
  * @typedef {object} quickMapMultiReturn
  * @property {ol.Map} map The X Coordinate
@@ -31,9 +31,9 @@ var nm = provide_1.default('olHelpers');
  * @returns return object with map, map move, and map popup objects
  */
 function quickMapMulti(options) {
-    var m = quickMapBase_1.quickMapBase(options);
-    var mov = new mapMoveCls_1.default();
-    var pop = new mapPopupCls_1.default();
+    let m = quickMapBase_1.quickMapBase(options);
+    let mov = new mapMoveCls_1.default();
+    let pop = new mapPopupCls_1.default();
     mov.init(m);
     pop.init(m);
     return { map: m, mapMove: mov, mapPopup: pop };
diff --git a/dist/olHelpers/quickMapMulti.js.map b/dist/olHelpers/quickMapMulti.js.map
index d0a4f89..32b281b 100644
--- a/dist/olHelpers/quickMapMulti.js.map
+++ b/dist/olHelpers/quickMapMulti.js.map
@@ -1 +1 @@
-{"version":3,"file":"quickMapMulti.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapMulti.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,+CAA6D;AAC7D,2CAAsC;AACtC,2CAAsC;AACtC,6CAAwC;AACxC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;GAKG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,SAAS,aAAa,CAAC,OAAwB;IAC3C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,IAAI,oBAAU,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,IAAI,qBAAW,EAAE,CAAC;IAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEZ,OAAO,EAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAC,CAAC;AACjD,CAAC;AAED,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC;AACjC,kBAAe,aAAa,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport Map from 'ol/Map'\r\n\r\nimport {quickMapBase, quickMapOptions} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport MapMoveCls from './mapMoveCls';\r\nimport MapPopupCls from './mapPopupCls';\r\nlet nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * @typedef {object} quickMapMultiReturn\r\n * @property {ol.Map} map The X Coordinate\r\n * @property {MapMoveCls} mapMove The Y Coordinate\r\n * @property {MapPopupCls} mapPopup The Y Coordinate\r\n */\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns return object with map, map move, and map popup objects\r\n */\r\nfunction quickMapMulti(options: quickMapOptions): {map: Map, mapMove: MapMoveCls, mapPopup: MapPopupCls} {\r\n    let m = quickMapBase(options);\r\n    let mov = new MapMoveCls();\r\n    let pop = new MapPopupCls();\r\n    mov.init(m);\r\n    pop.init(m);\r\n\r\n    return {map: m, mapMove: mov, mapPopup: pop};\r\n}\r\n\r\nnm.quickMapMulti = quickMapMulti;\r\nexport default quickMapMulti;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"quickMapMulti.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapMulti.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,iDAA6D;AAC7D,6CAAsC;AACtC,6CAAsC;AACtC,+CAAwC;AACxC,IAAI,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAG9B;;;;;GAKG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,SAAS,aAAa,CAAC,OAAwB;IAC3C,IAAI,CAAC,GAAG,2BAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,IAAI,oBAAU,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,IAAI,qBAAW,EAAE,CAAC;IAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEZ,OAAO,EAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAC,CAAC;AACjD,CAAC;AAED,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC;AACjC,kBAAe,aAAa,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport Map from 'ol/Map'\r\n\r\nimport {quickMapBase, quickMapOptions} from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport MapMoveCls from './mapMoveCls';\r\nimport MapPopupCls from './mapPopupCls';\r\nlet nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * @typedef {object} quickMapMultiReturn\r\n * @property {ol.Map} map The X Coordinate\r\n * @property {MapMoveCls} mapMove The Y Coordinate\r\n * @property {MapPopupCls} mapPopup The Y Coordinate\r\n */\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns return object with map, map move, and map popup objects\r\n */\r\nfunction quickMapMulti(options: quickMapOptions): {map: Map, mapMove: MapMoveCls, mapPopup: MapPopupCls} {\r\n    let m = quickMapBase(options);\r\n    let mov = new MapMoveCls();\r\n    let pop = new MapPopupCls();\r\n    mov.init(m);\r\n    pop.init(m);\r\n\r\n    return {map: m, mapMove: mov, mapPopup: pop};\r\n}\r\n\r\nnm.quickMapMulti = quickMapMulti;\r\nexport default quickMapMulti;\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/sortedFeatures.js b/dist/olHelpers/sortedFeatures.js
index c84ece3..85114b8 100644
--- a/dist/olHelpers/sortedFeatures.js
+++ b/dist/olHelpers/sortedFeatures.js
@@ -3,19 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 12/23/2015.
  */
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('olHelpers');
-var SortedFeatures = /** @class */ (function () {
-    function SortedFeatures(features, propertyName) {
-        var _this = this;
+const provide_1 = require("../util/provide");
+let nm = provide_1.default('olHelpers');
+class SortedFeatures {
+    constructor(features, propertyName) {
         this.sortedFeatures = features;
         this.propertyName = propertyName;
         if (this.sortedFeatures.length > 0) {
             this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
             // let __this = this;
-            this.sortedFeatures.sort(function (a, b) {
-                if (_this._propertyType == 'number') {
-                    var aMinusB = a.getProperties()[_this.propertyName] - b.getProperties()[_this.propertyName];
+            this.sortedFeatures.sort((a, b) => {
+                if (this._propertyType == 'number') {
+                    let aMinusB = a.getProperties()[this.propertyName] - b.getProperties()[this.propertyName];
                     if (aMinusB == 0) {
                         return 0;
                     }
@@ -23,9 +22,9 @@ var SortedFeatures = /** @class */ (function () {
                         return aMinusB > 0 ? 1 : -1;
                     }
                 }
-                else if (_this._propertyType == 'string') {
-                    var propA = a.getProperties()[_this.propertyName] || '';
-                    var propB = b.getProperties()[_this.propertyName] || '';
+                else if (this._propertyType == 'string') {
+                    let propA = a.getProperties()[this.propertyName] || '';
+                    let propB = b.getProperties()[this.propertyName] || '';
                     propA = propA.toString().trim();
                     propB = propB.toString().trim();
                     if (propA == propB) {
@@ -38,8 +37,7 @@ var SortedFeatures = /** @class */ (function () {
             });
         }
     }
-    SortedFeatures.prototype.getFeature = function (propertyValue, exactMatch, sortedFeatures) {
-        if (exactMatch === void 0) { exactMatch = false; }
+    getFeature(propertyValue, exactMatch = false, sortedFeatures) {
         if (typeof sortedFeatures == 'undefined') {
             sortedFeatures = this.sortedFeatures;
         }
@@ -59,8 +57,8 @@ var SortedFeatures = /** @class */ (function () {
                 return sortedFeatures[0];
             }
         }
-        var lowProp = sortedFeatures[0].getProperties()[this.propertyName];
-        var highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
+        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];
+        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
         if (exactMatch) {
             if (lowProp == propertyValue) {
                 return sortedFeatures[0];
@@ -83,9 +81,9 @@ var SortedFeatures = /** @class */ (function () {
                 return sortedFeatures[sortedFeatures.length - 1];
             }
         }
-        var midIndex = Math.floor(sortedFeatures.length / 2);
-        var midFeature = sortedFeatures[midIndex];
-        var midProperty = midFeature.getProperties()[this.propertyName];
+        let midIndex = Math.floor(sortedFeatures.length / 2);
+        let midFeature = sortedFeatures[midIndex];
+        let midProperty = midFeature.getProperties()[this.propertyName];
         if (midProperty === propertyValue) {
             return midFeature;
         }
@@ -95,9 +93,8 @@ var SortedFeatures = /** @class */ (function () {
         else {
             return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
         }
-    };
-    return SortedFeatures;
-}());
+    }
+}
 exports.SortedFeatures = SortedFeatures;
 nm.SortedFeatures = SortedFeatures;
 exports.default = SortedFeatures;
diff --git a/dist/olHelpers/sortedFeatures.js.map b/dist/olHelpers/sortedFeatures.js.map
index 27da786..5fde667 100644
--- a/dist/olHelpers/sortedFeatures.js.map
+++ b/dist/olHelpers/sortedFeatures.js.map
@@ -1 +1 @@
-{"version":3,"file":"sortedFeatures.js","sourceRoot":"","sources":["../../src/olHelpers/sortedFeatures.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/23/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport Feature from 'ol/Feature';\r\nlet nm = provide('olHelpers');\r\n\r\nexport class SortedFeatures {\r\n    sortedFeatures: Feature[];\r\n    propertyName: string;\r\n    _propertyType: string;\r\n\r\n    constructor(features: Feature[], propertyName: string) {\r\n        this.sortedFeatures = features;\r\n        this.propertyName = propertyName;\r\n\r\n        if (this.sortedFeatures.length > 0) {\r\n            this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];\r\n\r\n            // let __this = this;\r\n            this.sortedFeatures.sort( (a: Feature, b: Feature) : number =>{\r\n                if (this._propertyType == 'number'){\r\n                    let aMinusB = a.getProperties()[this.propertyName] - b.getProperties()[this.propertyName];\r\n                    if (aMinusB == 0){\r\n                        return 0;\r\n                    } else {\r\n                        return aMinusB > 0 ? 1 : -1;\r\n                    }\r\n                } else if (this._propertyType == 'string'){\r\n                    let propA = a.getProperties()[this.propertyName] || '';\r\n                    let propB = b.getProperties()[this.propertyName] || '';\r\n                    propA = propA.toString().trim();\r\n                    propB = propB.toString().trim();\r\n\r\n                    if (propA == propB){\r\n                        return 0;\r\n                    } else {\r\n                        return propA > propB ? 1 : -1;\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    getFeature(propertyValue: number|string, exactMatch: boolean = false, sortedFeatures? :Array<Feature>): Feature {\r\n        if (typeof sortedFeatures == 'undefined'){\r\n            sortedFeatures = this.sortedFeatures;\r\n        }\r\n\r\n\r\n        if (sortedFeatures.length == 0){\r\n            return undefined;\r\n        }\r\n\r\n        if (sortedFeatures.length == 1){\r\n            if (exactMatch){\r\n                if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue){\r\n                    return sortedFeatures[0];\r\n                } else {\r\n                    return undefined;\r\n                }\r\n            } else {\r\n                return sortedFeatures[0];\r\n            }\r\n        }\r\n\r\n        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];\r\n        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];\r\n\r\n        if (exactMatch){\r\n            if (lowProp == propertyValue){\r\n                return sortedFeatures[0];\r\n            } else if (propertyValue < lowProp){\r\n                return undefined;\r\n            } else if (highProp == propertyValue){\r\n                return sortedFeatures[sortedFeatures.length - 1];\r\n            } else if (propertyValue >  highProp){\r\n                return undefined;\r\n            }\r\n        } else {\r\n            if (propertyValue <= lowProp){\r\n                return sortedFeatures[0];\r\n            } else if (propertyValue >= highProp){\r\n                return sortedFeatures[sortedFeatures.length - 1];\r\n            }\r\n        }\r\n\r\n        let midIndex = Math.floor(sortedFeatures.length / 2);\r\n        let midFeature = sortedFeatures[midIndex];\r\n        let midProperty = midFeature.getProperties()[this.propertyName];\r\n\r\n        if (midProperty ===  propertyValue){\r\n            return midFeature;\r\n        }\r\n\r\n        if (propertyValue < midProperty){\r\n            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));\r\n        } else {\r\n            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));\r\n        }\r\n    }\r\n}\r\n\r\nnm.SortedFeatures = SortedFeatures;\r\nexport default SortedFeatures;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"sortedFeatures.js","sourceRoot":"","sources":["../../src/olHelpers/sortedFeatures.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/23/2015.\r\n */\r\nimport provide from '../util/provide';\r\nimport Feature from 'ol/Feature';\r\nlet nm = provide('olHelpers');\r\n\r\nexport class SortedFeatures {\r\n    sortedFeatures: Feature[];\r\n    propertyName: string;\r\n    _propertyType: string;\r\n\r\n    constructor(features: Feature[], propertyName: string) {\r\n        this.sortedFeatures = features;\r\n        this.propertyName = propertyName;\r\n\r\n        if (this.sortedFeatures.length > 0) {\r\n            this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];\r\n\r\n            // let __this = this;\r\n            this.sortedFeatures.sort( (a: Feature, b: Feature) : number =>{\r\n                if (this._propertyType == 'number'){\r\n                    let aMinusB = a.getProperties()[this.propertyName] - b.getProperties()[this.propertyName];\r\n                    if (aMinusB == 0){\r\n                        return 0;\r\n                    } else {\r\n                        return aMinusB > 0 ? 1 : -1;\r\n                    }\r\n                } else if (this._propertyType == 'string'){\r\n                    let propA = a.getProperties()[this.propertyName] || '';\r\n                    let propB = b.getProperties()[this.propertyName] || '';\r\n                    propA = propA.toString().trim();\r\n                    propB = propB.toString().trim();\r\n\r\n                    if (propA == propB){\r\n                        return 0;\r\n                    } else {\r\n                        return propA > propB ? 1 : -1;\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    getFeature(propertyValue: number|string, exactMatch: boolean = false, sortedFeatures? :Array<Feature>): Feature {\r\n        if (typeof sortedFeatures == 'undefined'){\r\n            sortedFeatures = this.sortedFeatures;\r\n        }\r\n\r\n\r\n        if (sortedFeatures.length == 0){\r\n            return undefined;\r\n        }\r\n\r\n        if (sortedFeatures.length == 1){\r\n            if (exactMatch){\r\n                if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue){\r\n                    return sortedFeatures[0];\r\n                } else {\r\n                    return undefined;\r\n                }\r\n            } else {\r\n                return sortedFeatures[0];\r\n            }\r\n        }\r\n\r\n        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];\r\n        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];\r\n\r\n        if (exactMatch){\r\n            if (lowProp == propertyValue){\r\n                return sortedFeatures[0];\r\n            } else if (propertyValue < lowProp){\r\n                return undefined;\r\n            } else if (highProp == propertyValue){\r\n                return sortedFeatures[sortedFeatures.length - 1];\r\n            } else if (propertyValue >  highProp){\r\n                return undefined;\r\n            }\r\n        } else {\r\n            if (propertyValue <= lowProp){\r\n                return sortedFeatures[0];\r\n            } else if (propertyValue >= highProp){\r\n                return sortedFeatures[sortedFeatures.length - 1];\r\n            }\r\n        }\r\n\r\n        let midIndex = Math.floor(sortedFeatures.length / 2);\r\n        let midFeature = sortedFeatures[midIndex];\r\n        let midProperty = midFeature.getProperties()[this.propertyName];\r\n\r\n        if (midProperty ===  propertyValue){\r\n            return midFeature;\r\n        }\r\n\r\n        if (propertyValue < midProperty){\r\n            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));\r\n        } else {\r\n            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));\r\n        }\r\n    }\r\n}\r\n\r\nnm.SortedFeatures = SortedFeatures;\r\nexport default SortedFeatures;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/olHelpers/zoomResolutionConvert.js b/dist/olHelpers/zoomResolutionConvert.js
index 46a35e4..1719fc9 100644
--- a/dist/olHelpers/zoomResolutionConvert.js
+++ b/dist/olHelpers/zoomResolutionConvert.js
@@ -3,9 +3,9 @@
  * Created by gavorhes on 12/14/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("../util/provide");
-var nm = provide_1.default('olHelpers.zoomResolutionConvert');
-var _zoomResLookup = [
+const provide_1 = require("../util/provide");
+const nm = provide_1.default('olHelpers.zoomResolutionConvert');
+let _zoomResLookup = [
     156543.03392804097,
     78271.51696402048,
     39135.75848201024,
@@ -48,7 +48,7 @@ function zoomToResolution(zoomLevel) {
             return _zoomResLookup[zoomLevel];
         }
         else {
-            console.log("invalid zoom level provided: " + zoomLevel);
+            console.log(`invalid zoom level provided: ${zoomLevel}`);
             return undefined;
         }
     }
@@ -64,7 +64,7 @@ nm.zoomToResolution = zoomToResolution;
  * @returns {number|*} the zoom level
  */
 function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
+    for (let i = 0; i < _zoomResLookup.length; i++) {
         if (resolution >= _zoomResLookup[i]) {
             return i;
         }
diff --git a/dist/olHelpers/zoomResolutionConvert.js.map b/dist/olHelpers/zoomResolutionConvert.js.map
index 72f45c0..60e5008 100644
--- a/dist/olHelpers/zoomResolutionConvert.js.map
+++ b/dist/olHelpers/zoomResolutionConvert.js.map
@@ -1 +1 @@
-{"version":3,"file":"zoomResolutionConvert.js","sourceRoot":"","sources":["../../src/olHelpers/zoomResolutionConvert.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,2CAAsC;AACtC,IAAM,EAAE,GAAG,iBAAO,CAAC,iCAAiC,CAAC,CAAC;AAEtD,IAAI,cAAc,GAAG;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB,CAAC,IAAI;CAC7B,CAAC;AAEF;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,SAAiB;IAC9C,YAAY,CAAC;IAEb,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;QAC9B,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE;YAC1D,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;SACpC;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,kCAAgC,SAAW,CAAC,CAAC;YAEzD,OAAO,SAAS,CAAC;SACpB;KACJ;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAdD,4CAcC;AACD,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;QAC3C,IAAI,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE;YACjC,OAAO,CAAC,CAAC;SACZ;KACJ;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AARD,4CAQC;AAED,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel: number): number {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution: number): number{\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"zoomResolutionConvert.js","sourceRoot":"","sources":["../../src/olHelpers/zoomResolutionConvert.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,6CAAsC;AACtC,MAAM,EAAE,GAAG,iBAAO,CAAC,iCAAiC,CAAC,CAAC;AAEtD,IAAI,cAAc,GAAG;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB,CAAC,IAAI;CAC7B,CAAC;AAEF;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,SAAiB;IAC9C,YAAY,CAAC;IAEb,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;QAC9B,IAAI,SAAS,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE;YAC1D,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;SACpC;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;YAEzD,OAAO,SAAS,CAAC;SACpB;KACJ;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAdD,4CAcC;AACD,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,UAAkB;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;QAC3C,IAAI,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE;YACjC,OAAO,CAAC,CAAC;SACZ;KACJ;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AARD,4CAQC;AAED,EAAE,CAAC,gBAAgB,GAAG,gBAAgB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel: number): number {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution: number): number{\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n"]}
\ No newline at end of file
diff --git a/dist/reactComponents/DatePick.js b/dist/reactComponents/DatePick.js
index fe6feae..89cda60 100644
--- a/dist/reactComponents/DatePick.js
+++ b/dist/reactComponents/DatePick.js
@@ -2,58 +2,31 @@
 /**
  * Created by glenn on 6/14/2017.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __assign = (this && this.__assign) || function () {
-    __assign = Object.assign || function(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
-                t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
 Object.defineProperty(exports, "__esModule", { value: true });
-var React = require("react");
-var $ = require("jquery");
+const React = require("react");
+const $ = require("jquery");
 window['$'] = window['jQuery'] = $; // notice the definition of global variables here
 require("jqueryui");
-var makeGuid_1 = require("../util/makeGuid");
-var dateFormat_1 = require("./helpers/dateFormat");
+const makeGuid_1 = require("../util/makeGuid");
+const dateFormat_1 = require("./helpers/dateFormat");
 /**
  * params label, id, initialDate, change callback with value as string
  */
-var DatePick = /** @class */ (function (_super) {
-    __extends(DatePick, _super);
-    function DatePick(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.elId = _this.props.id || makeGuid_1.default();
-        return _this;
+class DatePick extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.elId = this.props.id || makeGuid_1.default();
     }
-    DatePick.prototype.componentDidMount = function () {
-        var _this = this;
-        var $el = $('#' + this.elId);
+    componentDidMount() {
+        let $el = $('#' + this.elId);
         $el.datepicker({
-            onSelect: function () {
-                _this.props.change(dateFormat_1.stringToDate($el.val()));
+            onSelect: () => {
+                this.props.change(dateFormat_1.stringToDate($el.val()));
             }
         });
-    };
-    DatePick.prototype.render = function () {
-        var params = {
+    }
+    render() {
+        let params = {
             id: this.elId,
             type: 'text',
             // style: {margin: "0 10px 0 5px", width: '73px'},
@@ -67,10 +40,9 @@ var DatePick = /** @class */ (function (_super) {
         }
         return React.createElement("span", { className: "date-pick" },
             React.createElement("label", { htmlFor: this.elId }, this.props.label),
-            React.createElement("input", __assign({ style: { textAlign: 'center', margin: "0 10px 0 5px", width: '73px' } }, params)));
-    };
-    return DatePick;
-}(React.Component));
+            React.createElement("input", Object.assign({ style: { textAlign: 'center', margin: "0 10px 0 5px", width: '73px' } }, params)));
+    }
+}
 exports.DatePick = DatePick;
 exports.default = DatePick;
 //# sourceMappingURL=DatePick.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/DatePick.js.map b/dist/reactComponents/DatePick.js.map
index 3fd8995..5892693 100644
--- a/dist/reactComponents/DatePick.js.map
+++ b/dist/reactComponents/DatePick.js.map
@@ -1 +1 @@
-{"version":3,"file":"DatePick.js","sourceRoot":"","sources":["../../src/reactComponents/DatePick.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAGH,6BAAgC;AAEhC,0BAA6B;AAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,iDAAiD;AACrF,oBAAkB;AAClB,6CAAwC;AAGxC,mDAAgE;AAUhE;;GAEG;AACH;IAA8B,4BAAgC;IAG1D,kBAAY,KAAgB,EAAE,OAAe;QAA7C,YACI,kBAAM,KAAK,EAAE,OAAO,CAAC,SAExB;QADG,KAAI,CAAC,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,EAAE,IAAI,kBAAQ,EAAE,CAAC;;IAC5C,CAAC;IAED,oCAAiB,GAAjB;QAAA,iBAUC;QATG,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,GAAG,CAAC,UAAU,CACV;YACI,QAAQ,EAAE;gBACN,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAY,CAAC,GAAG,CAAC,GAAG,EAAY,CAAC,CAAC,CAAC;YACzD,CAAC;SACJ,CACJ,CAAC;IACN,CAAC;IAED,yBAAM,GAAN;QACI,IAAI,MAAM,GAAG;YACT,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,IAAI,EAAE,MAAM;YACZ,kDAAkD;YAClD,QAAQ,EAAE,IAAI;SACjB,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;YACf,MAAM,CAAC,OAAO,CAAC,GAAG,yBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAClD;aAAM;YACH,MAAM,CAAC,cAAc,CAAC,GAAG,yBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;SAC/E;QAGD,OAAO,8BAAM,SAAS,EAAC,WAAW;YAC9B,+BAAO,OAAO,EAAE,IAAI,CAAC,IAAI,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAS;YAMrD,wCAAO,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAC,IAAM,MAAM,EAAG,CACtF,CAAA;IACX,CAAC;IACL,eAAC;AAAD,CAAC,AA7CD,CAA8B,KAAK,CAAC,SAAS,GA6C5C;AA7CY,4BAAQ;AA+CrB,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by glenn on 6/14/2017.\r\n */\r\n\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require(\"jquery\");\r\nwindow['$'] = window['jQuery'] = $; // notice the definition of global variables here\r\nimport 'jqueryui';\r\nimport makeGuid from '../util/makeGuid';\r\n\r\n\r\nimport {dateToString, stringToDate} from './helpers/dateFormat';\r\n\r\nexport interface iDatePick{\r\n    label: string;\r\n    id?: string;\r\n    initialDate?: Date;\r\n    change: (val: Date) => any;\r\n    val?: Date\r\n}\r\n\r\n/**\r\n * params label, id, initialDate, change callback with value as string\r\n */\r\nexport class DatePick extends React.Component<iDatePick, null> {\r\n    private elId: string;\r\n\r\n    constructor(props: iDatePick, context: Object){\r\n        super(props, context);\r\n        this.elId = this.props.id || makeGuid();\r\n    }\r\n\r\n    componentDidMount() {\r\n        let $el = $('#' + this.elId);\r\n\r\n        $el.datepicker(\r\n            {\r\n                onSelect: () => {\r\n                    this.props.change(stringToDate($el.val() as string));\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    render() {\r\n        let params = {\r\n            id: this.elId,\r\n            type: 'text',\r\n            // style: {margin: \"0 10px 0 5px\", width: '73px'},\r\n            readOnly: true\r\n        };\r\n\r\n        if (this.props.val){\r\n            params['value'] = dateToString(this.props.val);\r\n        } else {\r\n            params['defaultValue'] = dateToString(this.props.initialDate || new Date());\r\n        }\r\n\r\n\r\n        return <span className=\"date-pick\">\r\n            <label htmlFor={this.elId}>{this.props.label}</label>\r\n            {/*<input id={this.elId} type=\"text\"*/}\r\n                   {/*style={{margin: \"0 10px 0 5px\", width: '73px', textAlign: 'center'}}*/}\r\n                   {/*defaultValue={dateToString(this.props.initialDate || new Date())}*/}\r\n                   {/*readOnly={true}*/}\r\n            {/*/>*/}\r\n            <input style={{textAlign: 'center', margin: \"0 10px 0 5px\", width: '73px'}} {...params}/>\r\n        </span>\r\n    }\r\n}\r\n\r\nexport default DatePick;"]}
\ No newline at end of file
+{"version":3,"file":"DatePick.js","sourceRoot":"","sources":["../../src/reactComponents/DatePick.tsx"],"names":[],"mappings":";AAAA;;GAEG;;AAGH,+BAAgC;AAEhC,4BAA6B;AAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,iDAAiD;AACrF,oBAAkB;AAClB,+CAAwC;AAGxC,qDAAgE;AAUhE;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK,CAAC,SAA0B;IAG1D,YAAY,KAAgB,EAAE,OAAe;QACzC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,kBAAQ,EAAE,CAAC;IAC5C,CAAC;IAED,iBAAiB;QACb,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,GAAG,CAAC,UAAU,CACV;YACI,QAAQ,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAY,CAAC,GAAG,CAAC,GAAG,EAAY,CAAC,CAAC,CAAC;YACzD,CAAC;SACJ,CACJ,CAAC;IACN,CAAC;IAED,MAAM;QACF,IAAI,MAAM,GAAG;YACT,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,IAAI,EAAE,MAAM;YACZ,kDAAkD;YAClD,QAAQ,EAAE,IAAI;SACjB,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAC;YACf,MAAM,CAAC,OAAO,CAAC,GAAG,yBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAClD;aAAM;YACH,MAAM,CAAC,cAAc,CAAC,GAAG,yBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;SAC/E;QAGD,OAAO,8BAAM,SAAS,EAAC,WAAW;YAC9B,+BAAO,OAAO,EAAE,IAAI,CAAC,IAAI,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAS;YAMrD,6CAAO,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAC,IAAM,MAAM,EAAG,CACtF,CAAA;IACX,CAAC;CACJ;AA7CD,4BA6CC;AAED,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by glenn on 6/14/2017.\r\n */\r\n\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require(\"jquery\");\r\nwindow['$'] = window['jQuery'] = $; // notice the definition of global variables here\r\nimport 'jqueryui';\r\nimport makeGuid from '../util/makeGuid';\r\n\r\n\r\nimport {dateToString, stringToDate} from './helpers/dateFormat';\r\n\r\nexport interface iDatePick{\r\n    label: string;\r\n    id?: string;\r\n    initialDate?: Date;\r\n    change: (val: Date) => any;\r\n    val?: Date\r\n}\r\n\r\n/**\r\n * params label, id, initialDate, change callback with value as string\r\n */\r\nexport class DatePick extends React.Component<iDatePick, null> {\r\n    private elId: string;\r\n\r\n    constructor(props: iDatePick, context: Object){\r\n        super(props, context);\r\n        this.elId = this.props.id || makeGuid();\r\n    }\r\n\r\n    componentDidMount() {\r\n        let $el = $('#' + this.elId);\r\n\r\n        $el.datepicker(\r\n            {\r\n                onSelect: () => {\r\n                    this.props.change(stringToDate($el.val() as string));\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    render() {\r\n        let params = {\r\n            id: this.elId,\r\n            type: 'text',\r\n            // style: {margin: \"0 10px 0 5px\", width: '73px'},\r\n            readOnly: true\r\n        };\r\n\r\n        if (this.props.val){\r\n            params['value'] = dateToString(this.props.val);\r\n        } else {\r\n            params['defaultValue'] = dateToString(this.props.initialDate || new Date());\r\n        }\r\n\r\n\r\n        return <span className=\"date-pick\">\r\n            <label htmlFor={this.elId}>{this.props.label}</label>\r\n            {/*<input id={this.elId} type=\"text\"*/}\r\n                   {/*style={{margin: \"0 10px 0 5px\", width: '73px', textAlign: 'center'}}*/}\r\n                   {/*defaultValue={dateToString(this.props.initialDate || new Date())}*/}\r\n                   {/*readOnly={true}*/}\r\n            {/*/>*/}\r\n            <input style={{textAlign: 'center', margin: \"0 10px 0 5px\", width: '73px'}} {...params}/>\r\n        </span>\r\n    }\r\n}\r\n\r\nexport default DatePick;"]}
\ No newline at end of file
diff --git a/dist/reactComponents/DateRange.js b/dist/reactComponents/DateRange.js
index 627ffce..0cfaa56 100644
--- a/dist/reactComponents/DateRange.js
+++ b/dist/reactComponents/DateRange.js
@@ -2,25 +2,12 @@
 /**
  * Created by glenn on 6/12/2017.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var React = require("react");
+const React = require("react");
 require("jquery-ui");
-var makeGuid_1 = require("../util/makeGuid");
-var fixDate = require("./helpers/dateFormat");
-var DatePick_1 = require("./DatePick");
+const makeGuid_1 = require("../util/makeGuid");
+const fixDate = require("./helpers/dateFormat");
+const DatePick_1 = require("./DatePick");
 function stringToDate(dte) {
     if (dte.getTime) {
         return dte;
@@ -42,72 +29,58 @@ function stringToDate(dte) {
  * end: Date (*optional) - end date
  * npmrds: boolean (*optional) - is for npmrds
  */
-var DateRange = /** @class */ (function (_super) {
-    __extends(DateRange, _super);
-    function DateRange(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.startId = makeGuid_1.default();
-        _this.endId = makeGuid_1.default();
-        _this.versionTwoStart = new Date(2017, 1, 1);
-        _this.maxRange = Math.round(_this.props.maxRange) - 1;
-        _this.minRange = typeof _this.props['minRange'] == 'number' ? Math.round(_this.props['minRange']) : 1;
-        if (_this.minRange > _this.maxRange) {
+class DateRange extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.startId = makeGuid_1.default();
+        this.endId = makeGuid_1.default();
+        this.versionTwoStart = new Date(2017, 1, 1);
+        this.maxRange = Math.round(this.props.maxRange) - 1;
+        this.minRange = typeof this.props['minRange'] == 'number' ? Math.round(this.props['minRange']) : 1;
+        if (this.minRange > this.maxRange) {
             throw "DateRange component: Max range must be greater than min range";
         }
-        if (_this.props.initialEnd) {
-            _this.end = stringToDate(_this.props.initialEnd);
+        if (this.props.initialEnd) {
+            this.end = stringToDate(this.props.initialEnd);
         }
         else {
-            _this.end = new Date();
+            this.end = new Date();
         }
-        _this.end.setHours(0, 0, 0);
-        _this.start = new Date(_this.end.getTime());
-        _this.start.setDate(_this.start.getDate() - _this.maxRange);
-        _this.setNumDays();
-        return _this;
+        this.end.setHours(0, 0, 0);
+        this.start = new Date(this.end.getTime());
+        this.start.setDate(this.start.getDate() - this.maxRange);
+        this.setNumDays();
     }
-    DateRange.prototype.setNumDays = function () {
+    setNumDays() {
         this.numDays = Math.round((this.end.getTime() - this.start.getTime()) / (1000 * 60 * 60 * 24)) + 1;
-    };
-    DateRange.prototype.componentDidMount = function () {
+    }
+    componentDidMount() {
         this.startInput = document.getElementById(this.startId);
         this.endInput = document.getElementById(this.endId);
         this.props.callback(this.start, this.end, this.version);
-    };
-    Object.defineProperty(DateRange.prototype, "needReset", {
-        get: function () {
-            return this.numDays > this.maxRange || this.numDays < this.minRange;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(DateRange.prototype, "versionSpan", {
-        get: function () {
-            if (this.start < this.versionTwoStart && this.end >= this.versionTwoStart) {
-                return true;
-            }
-            else if (fixDate.dateToString(this.versionTwoStart) === fixDate.dateToString(this.end) && this.start < this.versionTwoStart) {
-                return true;
-            }
-            return false;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    Object.defineProperty(DateRange.prototype, "version", {
-        get: function () {
-            if (fixDate.dateToString(this.start) == fixDate.dateToString(this.versionTwoStart)) {
-                return 2;
-            }
-            else if (this.start >= this.versionTwoStart) {
-                return 2;
-            }
-            return 1;
-        },
-        enumerable: true,
-        configurable: true
-    });
-    DateRange.prototype.finalizeChange = function () {
+    }
+    get needReset() {
+        return this.numDays > this.maxRange || this.numDays < this.minRange;
+    }
+    get versionSpan() {
+        if (this.start < this.versionTwoStart && this.end >= this.versionTwoStart) {
+            return true;
+        }
+        else if (fixDate.dateToString(this.versionTwoStart) === fixDate.dateToString(this.end) && this.start < this.versionTwoStart) {
+            return true;
+        }
+        return false;
+    }
+    get version() {
+        if (fixDate.dateToString(this.start) == fixDate.dateToString(this.versionTwoStart)) {
+            return 2;
+        }
+        else if (this.start >= this.versionTwoStart) {
+            return 2;
+        }
+        return 1;
+    }
+    finalizeChange() {
         if (this.props.npmrds) {
             if (this.versionSpan) {
                 this.start = this.previousStart;
@@ -120,8 +93,8 @@ var DateRange = /** @class */ (function (_super) {
             }
         }
         this.props.callback(this.start, this.end, this.version);
-    };
-    DateRange.prototype.setStart = function (s) {
+    }
+    setStart(s) {
         this.previousStart = new Date(this.start.getTime());
         this.previousEnd = new Date(this.end.getTime());
         this.start = s;
@@ -138,8 +111,8 @@ var DateRange = /** @class */ (function (_super) {
             this.setNumDays();
         }
         this.finalizeChange();
-    };
-    DateRange.prototype.setEnd = function (s) {
+    }
+    setEnd(s) {
         this.previousStart = new Date(this.start.getTime());
         this.previousEnd = new Date(this.end.getTime());
         this.end = s;
@@ -156,14 +129,12 @@ var DateRange = /** @class */ (function (_super) {
             this.setNumDays();
         }
         this.finalizeChange();
-    };
-    DateRange.prototype.render = function () {
-        var _this = this;
+    }
+    render() {
         return React.createElement("div", { className: "date-range" },
-            React.createElement(DatePick_1.default, { id: this.startId, label: "Start", initialDate: this.start, change: function (s) { _this.setStart(s); } }),
-            React.createElement(DatePick_1.default, { id: this.endId, label: "End", initialDate: this.end, change: function (s) { _this.setEnd(s); } }));
-    };
-    return DateRange;
-}(React.Component));
+            React.createElement(DatePick_1.default, { id: this.startId, label: "Start", initialDate: this.start, change: (s) => { this.setStart(s); } }),
+            React.createElement(DatePick_1.default, { id: this.endId, label: "End", initialDate: this.end, change: (s) => { this.setEnd(s); } }));
+    }
+}
 exports.DateRange = DateRange;
 //# sourceMappingURL=DateRange.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/DateRange.js.map b/dist/reactComponents/DateRange.js.map
index 0dbb34c..bad99e4 100644
--- a/dist/reactComponents/DateRange.js.map
+++ b/dist/reactComponents/DateRange.js.map
@@ -1 +1 @@
-{"version":3,"file":"DateRange.js","sourceRoot":"","sources":["../../src/reactComponents/DateRange.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;AAEH,6BAAgC;AAGhC,qBAAmB;AACnB,6CAAwC;AACxC,8CAAgD;AAChD,uCAAkC;AAElC,SAAS,YAAY,CAAC,GAAgB;IAClC,IAAK,GAAY,CAAC,OAAO,EAAC;QACtB,OAAO,GAAW,CAAC;KACtB;SAAM;QACH,OAAO,IAAI,IAAI,CAAC,GAAa,CAAC,CAAC;KAClC;AACL,CAAC;AAcD;;;;;;;;;;;;GAYG;AACH;IAA+B,6BAA+B;IAc1D,mBAAY,KAAiB,EAAE,OAAe;QAA9C,YACI,kBAAM,KAAK,EAAE,OAAO,CAAC,SAsBxB;QApCD,aAAO,GAAG,kBAAQ,EAAE,CAAC;QACrB,WAAK,GAAG,kBAAQ,EAAE,CAAC;QAef,KAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5C,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpD,KAAI,CAAC,QAAQ,GAAG,OAAO,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnG,IAAI,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,QAAQ,EAAE;YAC/B,MAAM,+DAA+D,CAAC;SACzE;QAED,IAAI,KAAI,CAAC,KAAK,CAAC,UAAU,EAAC;YACtB,KAAI,CAAC,GAAG,GAAG,YAAY,CAAC,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;SACjD;aAAM;YACH,KAAI,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;SACzB;QAED,KAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3B,KAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,KAAI,CAAC,UAAU,EAAE,CAAC;;IACtB,CAAC;IAED,8BAAU,GAAV;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACvG,CAAC;IAGD,qCAAiB,GAAjB;QACI,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAqB,CAAC;QAC5E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAqB,CAAC;QAGxE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,sBAAY,gCAAS;aAArB;YACI,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxE,CAAC;;;OAAA;IAED,sBAAY,kCAAW;aAAvB;YAEI,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,EAAC;gBACtE,OAAO,IAAI,CAAC;aACf;iBAAM,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAC;gBAC1H,OAAO,IAAI,CAAC;aACf;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;;;OAAA;IAED,sBAAY,8BAAO;aAAnB;YAEI,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAC;gBAC/E,OAAO,CAAC,CAAC;aACZ;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAC;gBAC1C,OAAO,CAAC,CAAC;aACZ;YACD,OAAO,CAAC,CAAC;QACb,CAAC;;;OAAA;IAEO,kCAAc,GAAtB;QAEI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC;YAClB,IAAI,IAAI,CAAC,WAAW,EAAC;gBACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;gBAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBAE5B,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,KAAK,CAAC,mDAAmD,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBACxG,OAAO;aACV;SACJ;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEO,4BAAQ,GAAhB,UAAiB,CAAO;QAEpB,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAEf,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxD;iBAAM;gBACH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aAC5D;YAED,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,0BAAM,GAAd,UAAe,CAAO;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5D;iBAAM;gBACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aAChE;YAED,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,0BAAM,GAAN;QAAA,iBAKC;QAJG,OAAO,6BAAK,SAAS,EAAC,YAAY;YAC9B,oBAAC,kBAAQ,IAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAC,OAAO,EAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAC,CAAC,IAAM,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC,GAAG;YACvG,oBAAC,kBAAQ,IAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAC,KAAK,EAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAC,CAAC,IAAM,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC,GAAG,CAC7F,CAAC;IACX,CAAC;IACL,gBAAC;AAAD,CAAC,AArJD,CAA+B,KAAK,CAAC,SAAS,GAqJ7C;AArJY,8BAAS","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\nimport makeGuid from '../util/makeGuid';\r\nimport * as fixDate from './helpers/dateFormat';\r\nimport DatePick from './DatePick';\r\n\r\nfunction stringToDate(dte: string|Date){\r\n    if ((dte as Date).getTime){\r\n        return dte as Date;\r\n    } else {\r\n        return new Date(dte as string);\r\n    }\r\n}\r\n\r\nexport interface iDateRange{\r\n    maxRange: number;\r\n    callback: (start: Date, end: Date, version?: number) => any;\r\n    minRange: number;\r\n    maxDate: Date;\r\n    minDate: Date;\r\n    initialEnd: Date;\r\n    start: Date;\r\n    end: Date;\r\n    npmrds: boolean;\r\n}\r\n\r\n/**\r\n * Date range widget\r\n *\r\n * maxRange: number - max number of days\r\n * callback: (start: Date, end: Date, version?: number) => any - callback function\r\n * minRange: number (*optional)\r\n * minDate: Date (*optional) - minimum date\r\n * maxDate: Date (*optional) - maximum date\r\n * initialEnd: Date (*optional) - initial, defaults to end date\r\n * start: Date (*optional) - start date\r\n * end: Date (*optional) - end date\r\n * npmrds: boolean (*optional) - is for npmrds\r\n */\r\nexport class DateRange extends React.Component<iDateRange, {}> {\r\n    startId = makeGuid();\r\n    endId = makeGuid();\r\n    startInput: HTMLInputElement;\r\n    endInput: HTMLInputElement;\r\n    start: Date;\r\n    end: Date;\r\n    maxRange: number;\r\n    minRange: number;\r\n    numDays: number;\r\n    versionTwoStart: Date;\r\n    previousStart: Date;\r\n    previousEnd: Date;\r\n\r\n    constructor(props: iDateRange, context: Object) {\r\n        super(props, context);\r\n\r\n        this.versionTwoStart = new Date(2017, 1, 1);\r\n\r\n        this.maxRange = Math.round(this.props.maxRange) - 1;\r\n        this.minRange = typeof this.props['minRange'] == 'number' ? Math.round(this.props['minRange']) : 1;\r\n\r\n        if (this.minRange > this.maxRange) {\r\n            throw \"DateRange component: Max range must be greater than min range\";\r\n        }\r\n\r\n        if (this.props.initialEnd){\r\n            this.end = stringToDate(this.props.initialEnd)\r\n        } else {\r\n            this.end = new Date();\r\n        }\r\n\r\n        this.end.setHours(0, 0, 0);\r\n\r\n        this.start = new Date(this.end.getTime());\r\n        this.start.setDate(this.start.getDate() - this.maxRange);\r\n        this.setNumDays();\r\n    }\r\n\r\n    setNumDays() {\r\n        this.numDays = Math.round((this.end.getTime() - this.start.getTime()) / (1000 * 60 * 60 * 24)) + 1;\r\n    }\r\n\r\n\r\n    componentDidMount() {\r\n        this.startInput = document.getElementById(this.startId) as HTMLInputElement;\r\n        this.endInput = document.getElementById(this.endId) as HTMLInputElement;\r\n\r\n\r\n        this.props.callback(this.start, this.end, this.version);\r\n    }\r\n\r\n    private get needReset(): boolean {\r\n        return this.numDays > this.maxRange || this.numDays < this.minRange;\r\n    }\r\n\r\n    private get versionSpan(): boolean{\r\n\r\n        if (this.start < this.versionTwoStart && this.end >= this.versionTwoStart){\r\n            return true;\r\n        } else if (fixDate.dateToString(this.versionTwoStart) === fixDate.dateToString(this.end) && this.start < this.versionTwoStart){\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private get version(): number{\r\n\r\n        if (fixDate.dateToString(this.start) == fixDate.dateToString(this.versionTwoStart)){\r\n            return 2;\r\n        } else if (this.start >= this.versionTwoStart){\r\n            return 2;\r\n        }\r\n        return 1;\r\n    }\r\n\r\n    private finalizeChange(){\r\n\r\n        if (this.props.npmrds){\r\n            if (this.versionSpan){\r\n                this.start = this.previousStart;\r\n                this.end = this.previousEnd;\r\n\r\n                this.startInput.value = fixDate.dateToString(this.start);\r\n                this.endInput.value = fixDate.dateToString(this.end);\r\n                this.setNumDays();\r\n                alert(\"Start and End dates must not span version break: \" + fixDate.dateToString(this.versionTwoStart));\r\n                return;\r\n            }\r\n        }\r\n\r\n        this.props.callback(this.start, this.end, this.version);\r\n    }\r\n\r\n    private setStart(s: Date) {\r\n\r\n        this.previousStart = new Date(this.start.getTime());\r\n        this.previousEnd = new Date(this.end.getTime());\r\n\r\n        this.start = s;\r\n\r\n        this.setNumDays();\r\n\r\n        if (this.needReset) {\r\n            this.end = new Date(this.start.getTime());\r\n\r\n            if (this.numDays > this.maxRange) {\r\n                this.end.setDate(this.end.getDate() + this.maxRange);\r\n            } else {\r\n                this.end.setDate(this.end.getDate() + this.minRange - 1);\r\n            }\r\n\r\n            this.endInput.value = fixDate.dateToString(this.end);\r\n            this.setNumDays();\r\n        }\r\n\r\n        this.finalizeChange();\r\n    }\r\n\r\n    private setEnd(s: Date) {\r\n        this.previousStart = new Date(this.start.getTime());\r\n        this.previousEnd = new Date(this.end.getTime());\r\n\r\n        this.end = s;\r\n        this.setNumDays();\r\n\r\n        if (this.needReset) {\r\n            this.start = new Date(this.end.getTime());\r\n\r\n            if (this.numDays > this.maxRange) {\r\n                this.start.setDate(this.start.getDate() - this.maxRange);\r\n            } else {\r\n                this.start.setDate(this.start.getDate() - this.minRange + 1);\r\n            }\r\n\r\n            this.startInput.value = fixDate.dateToString(this.start);\r\n            this.setNumDays();\r\n        }\r\n\r\n        this.finalizeChange();\r\n    }\r\n\r\n    render() {\r\n        return <div className=\"date-range\">\r\n            <DatePick id={this.startId} label=\"Start\" initialDate={this.start} change={(s) => {this.setStart(s)}}/>\r\n            <DatePick id={this.endId} label=\"End\" initialDate={this.end} change={(s) => {this.setEnd(s)}}/>\r\n        </div>;\r\n    }\r\n}\r\n"]}
\ No newline at end of file
+{"version":3,"file":"DateRange.js","sourceRoot":"","sources":["../../src/reactComponents/DateRange.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\nimport makeGuid from '../util/makeGuid';\r\nimport * as fixDate from './helpers/dateFormat';\r\nimport DatePick from './DatePick';\r\n\r\nfunction stringToDate(dte: string|Date){\r\n    if ((dte as Date).getTime){\r\n        return dte as Date;\r\n    } else {\r\n        return new Date(dte as string);\r\n    }\r\n}\r\n\r\nexport interface iDateRange{\r\n    maxRange: number;\r\n    callback: (start: Date, end: Date, version?: number) => any;\r\n    minRange: number;\r\n    maxDate: Date;\r\n    minDate: Date;\r\n    initialEnd: Date;\r\n    start: Date;\r\n    end: Date;\r\n    npmrds: boolean;\r\n}\r\n\r\n/**\r\n * Date range widget\r\n *\r\n * maxRange: number - max number of days\r\n * callback: (start: Date, end: Date, version?: number) => any - callback function\r\n * minRange: number (*optional)\r\n * minDate: Date (*optional) - minimum date\r\n * maxDate: Date (*optional) - maximum date\r\n * initialEnd: Date (*optional) - initial, defaults to end date\r\n * start: Date (*optional) - start date\r\n * end: Date (*optional) - end date\r\n * npmrds: boolean (*optional) - is for npmrds\r\n */\r\nexport class DateRange extends React.Component<iDateRange, {}> {\r\n    startId = makeGuid();\r\n    endId = makeGuid();\r\n    startInput: HTMLInputElement;\r\n    endInput: HTMLInputElement;\r\n    start: Date;\r\n    end: Date;\r\n    maxRange: number;\r\n    minRange: number;\r\n    numDays: number;\r\n    versionTwoStart: Date;\r\n    previousStart: Date;\r\n    previousEnd: Date;\r\n\r\n    constructor(props: iDateRange, context: Object) {\r\n        super(props, context);\r\n\r\n        this.versionTwoStart = new Date(2017, 1, 1);\r\n\r\n        this.maxRange = Math.round(this.props.maxRange) - 1;\r\n        this.minRange = typeof this.props['minRange'] == 'number' ? Math.round(this.props['minRange']) : 1;\r\n\r\n        if (this.minRange > this.maxRange) {\r\n            throw \"DateRange component: Max range must be greater than min range\";\r\n        }\r\n\r\n        if (this.props.initialEnd){\r\n            this.end = stringToDate(this.props.initialEnd)\r\n        } else {\r\n            this.end = new Date();\r\n        }\r\n\r\n        this.end.setHours(0, 0, 0);\r\n\r\n        this.start = new Date(this.end.getTime());\r\n        this.start.setDate(this.start.getDate() - this.maxRange);\r\n        this.setNumDays();\r\n    }\r\n\r\n    setNumDays() {\r\n        this.numDays = Math.round((this.end.getTime() - this.start.getTime()) / (1000 * 60 * 60 * 24)) + 1;\r\n    }\r\n\r\n\r\n    componentDidMount() {\r\n        this.startInput = document.getElementById(this.startId) as HTMLInputElement;\r\n        this.endInput = document.getElementById(this.endId) as HTMLInputElement;\r\n\r\n\r\n        this.props.callback(this.start, this.end, this.version);\r\n    }\r\n\r\n    private get needReset(): boolean {\r\n        return this.numDays > this.maxRange || this.numDays < this.minRange;\r\n    }\r\n\r\n    private get versionSpan(): boolean{\r\n\r\n        if (this.start < this.versionTwoStart && this.end >= this.versionTwoStart){\r\n            return true;\r\n        } else if (fixDate.dateToString(this.versionTwoStart) === fixDate.dateToString(this.end) && this.start < this.versionTwoStart){\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private get version(): number{\r\n\r\n        if (fixDate.dateToString(this.start) == fixDate.dateToString(this.versionTwoStart)){\r\n            return 2;\r\n        } else if (this.start >= this.versionTwoStart){\r\n            return 2;\r\n        }\r\n        return 1;\r\n    }\r\n\r\n    private finalizeChange(){\r\n\r\n        if (this.props.npmrds){\r\n            if (this.versionSpan){\r\n                this.start = this.previousStart;\r\n                this.end = this.previousEnd;\r\n\r\n                this.startInput.value = fixDate.dateToString(this.start);\r\n                this.endInput.value = fixDate.dateToString(this.end);\r\n                this.setNumDays();\r\n                alert(\"Start and End dates must not span version break: \" + fixDate.dateToString(this.versionTwoStart));\r\n                return;\r\n            }\r\n        }\r\n\r\n        this.props.callback(this.start, this.end, this.version);\r\n    }\r\n\r\n    private setStart(s: Date) {\r\n\r\n        this.previousStart = new Date(this.start.getTime());\r\n        this.previousEnd = new Date(this.end.getTime());\r\n\r\n        this.start = s;\r\n\r\n        this.setNumDays();\r\n\r\n        if (this.needReset) {\r\n            this.end = new Date(this.start.getTime());\r\n\r\n            if (this.numDays > this.maxRange) {\r\n                this.end.setDate(this.end.getDate() + this.maxRange);\r\n            } else {\r\n                this.end.setDate(this.end.getDate() + this.minRange - 1);\r\n            }\r\n\r\n            this.endInput.value = fixDate.dateToString(this.end);\r\n            this.setNumDays();\r\n        }\r\n\r\n        this.finalizeChange();\r\n    }\r\n\r\n    private setEnd(s: Date) {\r\n        this.previousStart = new Date(this.start.getTime());\r\n        this.previousEnd = new Date(this.end.getTime());\r\n\r\n        this.end = s;\r\n        this.setNumDays();\r\n\r\n        if (this.needReset) {\r\n            this.start = new Date(this.end.getTime());\r\n\r\n            if (this.numDays > this.maxRange) {\r\n                this.start.setDate(this.start.getDate() - this.maxRange);\r\n            } else {\r\n                this.start.setDate(this.start.getDate() - this.minRange + 1);\r\n            }\r\n\r\n            this.startInput.value = fixDate.dateToString(this.start);\r\n            this.setNumDays();\r\n        }\r\n\r\n        this.finalizeChange();\r\n    }\r\n\r\n    render() {\r\n        return <div className=\"date-range\">\r\n            <DatePick id={this.startId} label=\"Start\" initialDate={this.start} change={(s) => {this.setStart(s)}}/>\r\n            <DatePick id={this.endId} label=\"End\" initialDate={this.end} change={(s) => {this.setEnd(s)}}/>\r\n        </div>;\r\n    }\r\n}\r\n"]}
\ No newline at end of file
diff --git a/dist/reactComponents/Radio.js b/dist/reactComponents/Radio.js
index 7ce5150..2a4a801 100644
--- a/dist/reactComponents/Radio.js
+++ b/dist/reactComponents/Radio.js
@@ -2,57 +2,30 @@
 /**
  * Created by glenn on 6/12/2017.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __assign = (this && this.__assign) || function () {
-    __assign = Object.assign || function(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
-                t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
 Object.defineProperty(exports, "__esModule", { value: true });
-var React = require("react");
+const React = require("react");
 require("jquery-ui");
-var makeGuid_1 = require("../util/makeGuid");
-var RadioItem = /** @class */ (function (_super) {
-    __extends(RadioItem, _super);
-    function RadioItem(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.guid = makeGuid_1.default();
-        return _this;
+const makeGuid_1 = require("../util/makeGuid");
+class RadioItem extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.guid = makeGuid_1.default();
     }
-    RadioItem.prototype.render = function () {
-        var _this = this;
-        var style = {};
+    render() {
+        let style = {};
         if (this.props.inline) {
             style = {
                 display: 'inline-block',
                 padding: '0 5px'
             };
         }
-        var props = {
+        let props = {
             id: this.guid,
             type: "radio",
             name: this.props.groupId,
             value: typeof this.props.index == 'undefined' ? this.props.text : this.props.index.toFixed(),
-            onChange: function (evt) {
-                _this.props.change(evt.target.value);
+            onChange: (evt) => {
+                this.props.change(evt.target.value);
                 evt.target.checked = true;
             },
             checked: this.props.checked,
@@ -65,28 +38,24 @@ var RadioItem = /** @class */ (function (_super) {
             delete props.checked;
         }
         return React.createElement("li", { style: style },
-            React.createElement("input", __assign({}, props)),
+            React.createElement("input", Object.assign({}, props)),
             React.createElement("label", { htmlFor: this.guid }, this.props.text));
-    };
-    return RadioItem;
-}(React.Component));
-var RadioBase = /** @class */ (function (_super) {
-    __extends(RadioBase, _super);
-    function RadioBase(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.inline = _this.props.inline || false;
-        _this.groupId = _this.props.title.toLowerCase().replace(/ /g, '');
-        return _this;
     }
-    RadioBase.prototype.render = function () {
-        var _this = this;
-        var arr = [];
-        for (var i = 0; i < this.props.items.length; i++) {
-            var itemProps = {
+}
+class RadioBase extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.inline = this.props.inline || false;
+        this.groupId = this.props.title.toLowerCase().replace(/ /g, '');
+    }
+    render() {
+        let arr = [];
+        for (let i = 0; i < this.props.items.length; i++) {
+            let itemProps = {
                 groupId: this.groupId,
                 text: this.props.items[i],
                 inline: this.props.inline,
-                change: function (s) { return (_this.props.callback(s)); },
+                change: (s) => (this.props.callback(s)),
                 key: this.props.items[i],
                 connected: this.props.connected || false,
                 checked: false,
@@ -99,18 +68,17 @@ var RadioBase = /** @class */ (function (_super) {
                 itemProps.checked = this.props.items[i] == this.props.selectedValueOrIndex;
                 delete itemProps.index;
             }
-            arr.push(React.createElement(RadioItem, __assign({}, itemProps)));
+            arr.push(React.createElement(RadioItem, Object.assign({}, itemProps)));
         }
-        var classes = ['radio-list'];
+        let classes = ['radio-list'];
         if (this.props.classes) {
             classes = classes.concat(this.props.classes);
         }
         return React.createElement("div", { className: classes.join(' ') },
             React.createElement("h4", null, this.props.title),
             React.createElement("ul", { style: { listStyle: 'none' } }, arr));
-    };
-    return RadioBase;
-}(React.Component));
+    }
+}
 //
 // interface _iRadioBaseOpt {
 //     inline?: boolean;
@@ -134,30 +102,20 @@ var RadioBase = /** @class */ (function (_super) {
 //     inline?: boolean;
 //     classes?: string[];
 // }
-var Radio = /** @class */ (function (_super) {
-    __extends(Radio, _super);
-    function Radio() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    Radio.prototype.render = function () {
+class Radio extends React.Component {
+    render() {
         return React.createElement(RadioBase, { title: this.props.title, items: this.props.items, callback: this.props.callback, inline: this.props.inline, selectedValueOrIndex: this.props.defaultValue, connected: false, classes: this.props.classes });
-    };
-    return Radio;
-}(React.Component));
-exports.Radio = Radio;
-var RadioConnected = /** @class */ (function (_super) {
-    __extends(RadioConnected, _super);
-    function RadioConnected() {
-        return _super !== null && _super.apply(this, arguments) || this;
     }
-    RadioConnected.prototype.render = function () {
+}
+exports.Radio = Radio;
+class RadioConnected extends React.Component {
+    render() {
         return React.createElement(RadioBase, { title: this.props.title, items: this.props.items, callback: this.props.callback, inline: this.props.inline, selectedValueOrIndex: this.props.selectedIndex, connected: true, classes: this.props.classes });
-    };
-    RadioConnected.defaultProps = {
-        inline: false,
-        classes: []
-    };
-    return RadioConnected;
-}(React.Component));
+    }
+}
+RadioConnected.defaultProps = {
+    inline: false,
+    classes: []
+};
 exports.RadioConnected = RadioConnected;
 //# sourceMappingURL=Radio.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/Radio.js.map b/dist/reactComponents/Radio.js.map
index c993698..9da6a9f 100644
--- a/dist/reactComponents/Radio.js.map
+++ b/dist/reactComponents/Radio.js.map
@@ -1 +1 @@
-{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../src/reactComponents/Radio.tsx"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAGH,6BAAgC;AAGhC,qBAAmB;AACnB,6CAAwC;AAgBxC;IAAwB,6BAA+B;IAGnD,mBAAY,KAAiB,EAAE,OAAe;QAA9C,YACI,kBAAM,KAAK,EAAE,OAAO,CAAC,SAExB;QADG,KAAI,CAAC,IAAI,GAAG,kBAAQ,EAAE,CAAA;;IAC1B,CAAC;IAGD,0BAAM,GAAN;QAAA,iBAgCC;QA/BG,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnB,KAAK,GAAG;gBACJ,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,OAAO;aACnB,CAAC;SACL;QAED,IAAI,KAAK,GAAG;YACR,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5F,QAAQ,EAAE,UAAC,GAAkC;gBACzC,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,cAAc,EAAG,IAAI,CAAC,KAAK,CAAC,OAAO;SACtC,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACtB,OAAO,KAAK,CAAC,cAAc,CAAC;SAC/B;aAAM;YACH,OAAO,KAAK,CAAC,OAAO,CAAA;SACvB;QAED,OAAO,4BAAI,KAAK,EAAE,KAAK;YACnB,0CAAW,KAAK,EAAG;YACnB,+BAAO,OAAO,EAAE,IAAI,CAAC,IAAI,IAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAS,CACnD,CAAC;IACV,CAAC;IACL,gBAAC;AAAD,CAAC,AA1CD,CAAwB,KAAK,CAAC,SAAS,GA0CtC;AAkBD;IAAwB,6BAA+B;IAInD,mBAAY,KAAiB,EAAE,OAAe;QAA9C,YACI,kBAAM,KAAK,EAAE,OAAO,CAAC,SAGxB;QAFG,KAAI,CAAC,MAAM,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;QACzC,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;IACpE,CAAC;IAED,0BAAM,GAAN;QAAA,iBAuCC;QArCG,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAE9C,IAAI,SAAS,GAAG;gBACZ,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;gBACzB,MAAM,EAAE,UAAC,CAAS,IAAK,OAAA,CAAC,KAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAxB,CAAwB;gBAC/C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK;gBACxC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC;aACX,CAAC;YAEF,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,QAAQ,EAAC;gBACnD,SAAS,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;aAC5D;iBAAM;gBACH,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;gBAC3E,OAAO,SAAS,CAAC,KAAK,CAAA;aACzB;YAED,GAAG,CAAC,IAAI,CAAC,oBAAC,SAAS,eAAK,SAAS,EAAG,CAAC,CAAA;SACxC;QAED,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAC;YACnB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAChD;QAED,OAAO,6BAAK,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC,gCAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM;YAC3B,4BAAI,KAAK,EAAE,EAAC,SAAS,EAAE,MAAM,EAAC,IACzB,GAAG,CACH,CACH,CAAA;IACV,CAAC;IACL,gBAAC;AAAD,CAAC,AAlDD,CAAwB,KAAK,CAAC,SAAS,GAkDtC;AAED,EAAE;AACF,6BAA6B;AAC7B,wBAAwB;AACxB,0BAA0B;AAC1B,IAAI;AACJ,EAAE;AACF,gDAAgD;AAChD,qBAAqB;AACrB,uBAAuB;AACvB,sCAAsC;AACtC,0BAA0B;AAC1B,IAAI;AACJ,EAAE;AACF,4CAA4C;AAC5C,2CAA2C;AAC3C,IAAI;AAEJ,qBAAqB;AACrB,qBAAqB;AACrB,uBAAuB;AACvB,sCAAsC;AACtC,wBAAwB;AACxB,0BAA0B;AAC1B,IAAI;AAGJ;IAA2B,yBAME;IAN7B;;IAoBA,CAAC;IAZG,sBAAM,GAAN;QAEI,OAAO,oBAAC,SAAS,IACb,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EACzB,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAC7C,SAAS,EAAE,KAAK,EAChB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAC7B,CAAA;IACN,CAAC;IACL,YAAC;AAAD,CAAC,AApBD,CAA2B,KAAK,CAAC,SAAS,GAoBzC;AApBY,sBAAK;AAkClB;IAAoC,kCAAoC;IAAxE;;IAiBA,CAAC;IAXG,+BAAM,GAAN;QACI,OAAO,oBAAC,SAAS,IACb,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EACzB,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAC9C,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAC7B,CAAA;IACN,CAAC;IAfM,2BAAY,GAAG;QAClB,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE;KACd,CAAC;IAaN,qBAAC;CAAA,AAjBD,CAAoC,KAAK,CAAC,SAAS,GAiBlD;AAjBY,wCAAc","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\n\r\nexport interface iRadioItemOpt {\r\n    index?: number\r\n}\r\n\r\nexport interface iRadioItem extends iRadioItemOpt{\r\n    groupId: string;\r\n    text: string;\r\n    checked: boolean;\r\n    inline: boolean;\r\n    change: (s: string) => any;\r\n    connected?: boolean;\r\n}\r\n\r\nclass RadioItem extends React.Component<iRadioItem, {}> {\r\n    guid: string;\r\n\r\n    constructor(props: iRadioItem, context: Object){\r\n        super(props, context);\r\n        this.guid = makeGuid()\r\n    }\r\n\r\n\r\n    render() {\r\n        let style = {};\r\n        if (this.props.inline) {\r\n            style = {\r\n                display: 'inline-block',\r\n                padding: '0 5px'\r\n            };\r\n        }\r\n\r\n        let props = {\r\n            id: this.guid,\r\n            type: \"radio\",\r\n            name: this.props.groupId,\r\n            value: typeof this.props.index == 'undefined' ? this.props.text : this.props.index.toFixed(),\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {\r\n                this.props.change(evt.target.value);\r\n                evt.target.checked = true;\r\n            },\r\n            checked: this.props.checked,\r\n            defaultChecked:  this.props.checked\r\n        };\r\n\r\n        if (this.props.connected) {\r\n            delete props.defaultChecked;\r\n        } else {\r\n            delete props.checked\r\n        }\r\n\r\n        return <li style={style}>\r\n            <input {...props}/>\r\n            <label htmlFor={this.guid}>{this.props.text}</label>\r\n        </li>;\r\n    }\r\n}\r\n\r\ninterface _iRadioBaseOpt {\r\n    inline?: boolean;\r\n    classes?: string[];\r\n}\r\n\r\ninterface _iRadioBase extends _iRadioBaseOpt{\r\n    title: string;\r\n    items: string[];\r\n    callback: (val: string) => any;\r\n    connected: boolean;\r\n}\r\n\r\ninterface iRadioBase extends _iRadioBase{\r\n    selectedValueOrIndex: string|number;\r\n}\r\n\r\nclass RadioBase extends React.Component<iRadioBase, {}> {\r\n    inline: boolean;\r\n    groupId: string;\r\n\r\n    constructor(props: iRadioBase, context: Object) {\r\n        super(props, context);\r\n        this.inline = this.props.inline || false;\r\n        this.groupId = this.props.title.toLowerCase().replace(/ /g, '');\r\n    }\r\n\r\n    render() {\r\n\r\n        let arr = [];\r\n\r\n        for (let i = 0; i < this.props.items.length; i++) {\r\n\r\n            let itemProps = {\r\n                groupId: this.groupId,\r\n                text: this.props.items[i],\r\n                inline: this.props.inline,\r\n                change: (s: string) => (this.props.callback(s)),\r\n                key: this.props.items[i],\r\n                connected: this.props.connected || false,\r\n                checked: false,\r\n                index: i\r\n            };\r\n\r\n            if (typeof this.props.selectedValueOrIndex == 'number'){\r\n                itemProps.checked = i == this.props.selectedValueOrIndex;\r\n            } else {\r\n                itemProps.checked = this.props.items[i] == this.props.selectedValueOrIndex;\r\n                delete itemProps.index\r\n            }\r\n\r\n            arr.push(<RadioItem {...itemProps}/>)\r\n        }\r\n\r\n        let classes = ['radio-list'];\r\n\r\n        if (this.props.classes){\r\n            classes = classes.concat(this.props.classes);\r\n        }\r\n\r\n        return <div className={classes.join(' ')}>\r\n            <h4>{this.props.title}</h4>\r\n            <ul style={{listStyle: 'none'}}>\r\n                {arr}\r\n            </ul>\r\n        </div>\r\n    }\r\n}\r\n\r\n//\r\n// interface _iRadioBaseOpt {\r\n//     inline?: boolean;\r\n//     classes?: string[];\r\n// }\r\n//\r\n// interface _iRadioBase extends _iRadioBaseOpt{\r\n//     title: string;\r\n//     items: string[];\r\n//     callback: (val: string) => any;\r\n//     connected: boolean;\r\n// }\r\n//\r\n// interface iRadioBase extends _iRadioBase{\r\n//     selectedValueOrIndex: string|number;\r\n// }\r\n\r\n// interface iRadio {\r\n//     title: string;\r\n//     items: string[];\r\n//     callback: (val: string) => any;\r\n//     inline?: boolean;\r\n//     classes?: string[];\r\n// }\r\n\r\n\r\nexport class Radio extends React.Component<{\r\n    title: string,\r\n    items: string[],\r\n    callback: (val: string) => any,\r\n    defaultValue: string,\r\n    inline?: boolean,\r\n    classes?: string[] }, {}> {\r\n\r\n    render() {\r\n\r\n        return <RadioBase\r\n            title={this.props.title}\r\n            items={this.props.items}\r\n            callback={this.props.callback}\r\n            inline={this.props.inline}\r\n            selectedValueOrIndex={this.props.defaultValue}\r\n            connected={false}\r\n            classes={this.props.classes}\r\n        />\r\n    }\r\n}\r\n\r\ninterface iRadioConnectedOpt {\r\n    inline: boolean;\r\n    classes: string[];\r\n}\r\n\r\ninterface iRadioConnected extends iRadioConnectedOpt{\r\n    title: string;\r\n    items: string[];\r\n    callback: (val: string) => any;\r\n    selectedIndex: number;\r\n}\r\n\r\nexport class RadioConnected extends React.Component<iRadioConnected, {}> {\r\n    static defaultProps = {\r\n        inline: false,\r\n        classes: []\r\n    };\r\n\r\n    render() {\r\n        return <RadioBase\r\n            title={this.props.title}\r\n            items={this.props.items}\r\n            callback={this.props.callback}\r\n            inline={this.props.inline}\r\n            selectedValueOrIndex={this.props.selectedIndex}\r\n            connected={true}\r\n            classes={this.props.classes}\r\n        />\r\n    }\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../src/reactComponents/Radio.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\n\r\nimport React = require(\"react\");\r\n\r\nimport $ = require('jquery');\r\nimport 'jquery-ui';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\n\r\nexport interface iRadioItemOpt {\r\n    index?: number\r\n}\r\n\r\nexport interface iRadioItem extends iRadioItemOpt{\r\n    groupId: string;\r\n    text: string;\r\n    checked: boolean;\r\n    inline: boolean;\r\n    change: (s: string) => any;\r\n    connected?: boolean;\r\n}\r\n\r\nclass RadioItem extends React.Component<iRadioItem, {}> {\r\n    guid: string;\r\n\r\n    constructor(props: iRadioItem, context: Object){\r\n        super(props, context);\r\n        this.guid = makeGuid()\r\n    }\r\n\r\n\r\n    render() {\r\n        let style = {};\r\n        if (this.props.inline) {\r\n            style = {\r\n                display: 'inline-block',\r\n                padding: '0 5px'\r\n            };\r\n        }\r\n\r\n        let props = {\r\n            id: this.guid,\r\n            type: \"radio\",\r\n            name: this.props.groupId,\r\n            value: typeof this.props.index == 'undefined' ? this.props.text : this.props.index.toFixed(),\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {\r\n                this.props.change(evt.target.value);\r\n                evt.target.checked = true;\r\n            },\r\n            checked: this.props.checked,\r\n            defaultChecked:  this.props.checked\r\n        };\r\n\r\n        if (this.props.connected) {\r\n            delete props.defaultChecked;\r\n        } else {\r\n            delete props.checked\r\n        }\r\n\r\n        return <li style={style}>\r\n            <input {...props}/>\r\n            <label htmlFor={this.guid}>{this.props.text}</label>\r\n        </li>;\r\n    }\r\n}\r\n\r\ninterface _iRadioBaseOpt {\r\n    inline?: boolean;\r\n    classes?: string[];\r\n}\r\n\r\ninterface _iRadioBase extends _iRadioBaseOpt{\r\n    title: string;\r\n    items: string[];\r\n    callback: (val: string) => any;\r\n    connected: boolean;\r\n}\r\n\r\ninterface iRadioBase extends _iRadioBase{\r\n    selectedValueOrIndex: string|number;\r\n}\r\n\r\nclass RadioBase extends React.Component<iRadioBase, {}> {\r\n    inline: boolean;\r\n    groupId: string;\r\n\r\n    constructor(props: iRadioBase, context: Object) {\r\n        super(props, context);\r\n        this.inline = this.props.inline || false;\r\n        this.groupId = this.props.title.toLowerCase().replace(/ /g, '');\r\n    }\r\n\r\n    render() {\r\n\r\n        let arr = [];\r\n\r\n        for (let i = 0; i < this.props.items.length; i++) {\r\n\r\n            let itemProps = {\r\n                groupId: this.groupId,\r\n                text: this.props.items[i],\r\n                inline: this.props.inline,\r\n                change: (s: string) => (this.props.callback(s)),\r\n                key: this.props.items[i],\r\n                connected: this.props.connected || false,\r\n                checked: false,\r\n                index: i\r\n            };\r\n\r\n            if (typeof this.props.selectedValueOrIndex == 'number'){\r\n                itemProps.checked = i == this.props.selectedValueOrIndex;\r\n            } else {\r\n                itemProps.checked = this.props.items[i] == this.props.selectedValueOrIndex;\r\n                delete itemProps.index\r\n            }\r\n\r\n            arr.push(<RadioItem {...itemProps}/>)\r\n        }\r\n\r\n        let classes = ['radio-list'];\r\n\r\n        if (this.props.classes){\r\n            classes = classes.concat(this.props.classes);\r\n        }\r\n\r\n        return <div className={classes.join(' ')}>\r\n            <h4>{this.props.title}</h4>\r\n            <ul style={{listStyle: 'none'}}>\r\n                {arr}\r\n            </ul>\r\n        </div>\r\n    }\r\n}\r\n\r\n//\r\n// interface _iRadioBaseOpt {\r\n//     inline?: boolean;\r\n//     classes?: string[];\r\n// }\r\n//\r\n// interface _iRadioBase extends _iRadioBaseOpt{\r\n//     title: string;\r\n//     items: string[];\r\n//     callback: (val: string) => any;\r\n//     connected: boolean;\r\n// }\r\n//\r\n// interface iRadioBase extends _iRadioBase{\r\n//     selectedValueOrIndex: string|number;\r\n// }\r\n\r\n// interface iRadio {\r\n//     title: string;\r\n//     items: string[];\r\n//     callback: (val: string) => any;\r\n//     inline?: boolean;\r\n//     classes?: string[];\r\n// }\r\n\r\n\r\nexport class Radio extends React.Component<{\r\n    title: string,\r\n    items: string[],\r\n    callback: (val: string) => any,\r\n    defaultValue: string,\r\n    inline?: boolean,\r\n    classes?: string[] }, {}> {\r\n\r\n    render() {\r\n\r\n        return <RadioBase\r\n            title={this.props.title}\r\n            items={this.props.items}\r\n            callback={this.props.callback}\r\n            inline={this.props.inline}\r\n            selectedValueOrIndex={this.props.defaultValue}\r\n            connected={false}\r\n            classes={this.props.classes}\r\n        />\r\n    }\r\n}\r\n\r\ninterface iRadioConnectedOpt {\r\n    inline: boolean;\r\n    classes: string[];\r\n}\r\n\r\ninterface iRadioConnected extends iRadioConnectedOpt{\r\n    title: string;\r\n    items: string[];\r\n    callback: (val: string) => any;\r\n    selectedIndex: number;\r\n}\r\n\r\nexport class RadioConnected extends React.Component<iRadioConnected, {}> {\r\n    static defaultProps = {\r\n        inline: false,\r\n        classes: []\r\n    };\r\n\r\n    render() {\r\n        return <RadioBase\r\n            title={this.props.title}\r\n            items={this.props.items}\r\n            callback={this.props.callback}\r\n            inline={this.props.inline}\r\n            selectedValueOrIndex={this.props.selectedIndex}\r\n            connected={true}\r\n            classes={this.props.classes}\r\n        />\r\n    }\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/reactComponents/SelectArea.js b/dist/reactComponents/SelectArea.js
index b537e20..4e3c83c 100644
--- a/dist/reactComponents/SelectArea.js
+++ b/dist/reactComponents/SelectArea.js
@@ -2,37 +2,23 @@
 /**
  * Created by glenn on 6/12/2017.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
 Object.defineProperty(exports, "__esModule", { value: true });
-var React = require("react");
-var LayerBaseVectorGeoJson_1 = require("../layers/LayerBaseVectorGeoJson");
-var projections_1 = require("../olHelpers/projections");
-var makeGuid_1 = require("../util/makeGuid");
-var get_map_1 = require("./helpers/get_map");
-var Draw_1 = require("ol/interaction/Draw");
-var Style_1 = require("ol/style/Style");
-var Stroke_1 = require("ol/style/Stroke");
-var Fill_1 = require("ol/style/Fill");
-var SelectArea = /** @class */ (function (_super) {
-    __extends(SelectArea, _super);
-    function SelectArea(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.selectId = makeGuid_1.default();
-        _this.cancelId = makeGuid_1.default();
-        _this.callback = _this.props.callback;
-        _this.areaOverlay = new LayerBaseVectorGeoJson_1.default('', {
+const React = require("react");
+const LayerBaseVectorGeoJson_1 = require("../layers/LayerBaseVectorGeoJson");
+const projections_1 = require("../olHelpers/projections");
+const makeGuid_1 = require("../util/makeGuid");
+const get_map_1 = require("./helpers/get_map");
+const Draw_1 = require("ol/interaction/Draw");
+const Style_1 = require("ol/style/Style");
+const Stroke_1 = require("ol/style/Stroke");
+const Fill_1 = require("ol/style/Fill");
+class SelectArea extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.selectId = makeGuid_1.default();
+        this.cancelId = makeGuid_1.default();
+        this.callback = this.props.callback;
+        this.areaOverlay = new LayerBaseVectorGeoJson_1.default('', {
             style: new Style_1.default({
                 fill: new Fill_1.default({
                     color: 'rgba(255, 0, 237, 0.1)'
@@ -44,37 +30,34 @@ var SelectArea = /** @class */ (function (_super) {
             }),
             transform: { dataProjection: projections_1.proj4326, featureProjection: projections_1.proj3857 }
         });
-        _this.draw = new Draw_1.default({
-            source: _this.areaOverlay.source,
+        this.draw = new Draw_1.default({
+            source: this.areaOverlay.source,
             type: 'Polygon'
         });
         // this.draw.on('drawend', (evt: {feature: {getGeometry: () => Polygon}}) => {
-        _this.draw.on('drawend', function (evt) {
-            _this.selectButton.style.display = '';
-            _this.cancelButton.style.display = 'none';
-            var geom = evt['feature'].getGeometry();
-            var geomClone = geom.clone();
+        this.draw.on('drawend', (evt) => {
+            this.selectButton.style.display = '';
+            this.cancelButton.style.display = 'none';
+            let geom = evt['feature'].getGeometry();
+            let geomClone = geom.clone();
             geomClone.transform('EPSG:3857', 'EPSG:4326');
-            setTimeout(function () {
-                _this.map.removeInteraction(_this.draw);
+            setTimeout(() => {
+                this.map.removeInteraction(this.draw);
             }, 100);
-            var outCoords = [];
-            var ccc = geomClone.getCoordinates()[0];
-            for (var _i = 0, ccc_1 = ccc; _i < ccc_1.length; _i++) {
-                var cc = ccc_1[_i];
+            let outCoords = [];
+            let ccc = geomClone.getCoordinates()[0];
+            for (let cc of ccc) {
                 outCoords.push([Math.round(cc[0] * 1000000) / 1000000, Math.round(cc[1] * 1000000) / 1000000]);
             }
-            _this.callback(outCoords);
+            this.callback(outCoords);
         });
-        return _this;
     }
-    SelectArea.prototype.componentDidMount = function () {
-        var _this = this;
+    componentDidMount() {
         this.selectButton = document.getElementById(this.selectId);
         this.cancelButton = document.getElementById(this.cancelId);
-        get_map_1.default(this.props.map, this.areaOverlay.olLayer).then(function (m) { _this.map = m; });
-    };
-    SelectArea.prototype.setArea = function () {
+        get_map_1.default(this.props.map, this.areaOverlay.olLayer).then((m) => { this.map = m; });
+    }
+    setArea() {
         if (!this.map) {
             return;
         }
@@ -83,8 +66,8 @@ var SelectArea = /** @class */ (function (_super) {
         this.areaOverlay.source.clear();
         this.map.addInteraction(this.draw);
         this.callback(null);
-    };
-    SelectArea.prototype.cancel = function () {
+    }
+    cancel() {
         if (!this.map) {
             return;
         }
@@ -93,18 +76,16 @@ var SelectArea = /** @class */ (function (_super) {
         this.areaOverlay.source.clear();
         this.map.removeInteraction(this.draw);
         this.callback(null);
-    };
-    SelectArea.prototype.render = function () {
-        var _this = this;
+    }
+    render() {
         return React.createElement("div", { className: "ol-select-area", style: { margin: '10px' } },
-            React.createElement("button", { id: this.selectId, onClick: function () {
-                    _this.setArea();
+            React.createElement("button", { id: this.selectId, onClick: () => {
+                    this.setArea();
                 } }, "Select Area"),
-            React.createElement("button", { id: this.cancelId, onClick: function () {
-                    _this.cancel();
+            React.createElement("button", { id: this.cancelId, onClick: () => {
+                    this.cancel();
                 }, style: { display: 'none' } }, "Cancel"));
-    };
-    return SelectArea;
-}(React.Component));
+    }
+}
 exports.SelectArea = SelectArea;
 //# sourceMappingURL=SelectArea.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/SelectArea.js.map b/dist/reactComponents/SelectArea.js.map
index 857786b..338c506 100644
--- a/dist/reactComponents/SelectArea.js.map
+++ b/dist/reactComponents/SelectArea.js.map
@@ -1 +1 @@
-{"version":3,"file":"SelectArea.js","sourceRoot":"","sources":["../../src/reactComponents/SelectArea.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport LayerBaseVectorGeoJson from '../layers/LayerBaseVectorGeoJson';\r\nimport {proj4326, proj3857} from '../olHelpers/projections'\r\nimport makeGuid from '../util/makeGuid';\r\nimport getMap from './helpers/get_map';\r\nimport Map from 'ol/Map'\r\nimport Draw from 'ol/interaction/Draw';\r\nimport Style from 'ol/style/Style';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Polygon from 'ol/geom/Polygon';\r\nimport Feature from 'ol/Feature';\r\n\r\nexport interface iSelectArea{\r\n    map: Map | (() => Map);\r\n    callback: (coords: Array<number[]>) => any\r\n}\r\n\r\nexport class SelectArea extends React.Component<iSelectArea, {}> {\r\n    map: Map;\r\n    callback: (coords: Array<number[]>) => any;\r\n    areaOverlay: LayerBaseVectorGeoJson;\r\n    draw: Draw;\r\n    selectId: string;\r\n    cancelId: string;\r\n    selectButton: HTMLButtonElement;\r\n    cancelButton: HTMLButtonElement;\r\n\r\n\r\n    constructor(props: iSelectArea, context: Object) {\r\n        super(props, context);\r\n\r\n        this.selectId = makeGuid();\r\n        this.cancelId = makeGuid();\r\n\r\n        this.callback = this.props.callback;\r\n\r\n        this.areaOverlay = new LayerBaseVectorGeoJson('',\r\n            {\r\n                style: new Style({\r\n                    fill: new Fill({\r\n                        color: 'rgba(255, 0, 237, 0.1)'\r\n                    }),\r\n                    stroke: new Stroke({\r\n                        color: 'rgb(255, 0, 237)',\r\n                        width: 2\r\n                    })\r\n                }),\r\n                transform: {dataProjection: proj4326, featureProjection: proj3857}\r\n            });\r\n\r\n        this.draw = new Draw({\r\n            source: this.areaOverlay.source,\r\n            type: 'Polygon'\r\n        });\r\n\r\n        // this.draw.on('drawend', (evt: {feature: {getGeometry: () => Polygon}}) => {\r\n        this.draw.on('drawend', (evt) => {\r\n            this.selectButton.style.display = '';\r\n            this.cancelButton.style.display = 'none';\r\n\r\n\r\n\r\n            let geom = (evt['feature'] as Feature).getGeometry() as Polygon;\r\n            let geomClone = geom.clone();\r\n\r\n            geomClone.transform('EPSG:3857', 'EPSG:4326');\r\n\r\n            setTimeout(() => {\r\n                this.map.removeInteraction(this.draw);\r\n            }, 100);\r\n\r\n            let outCoords = [];\r\n            let ccc = geomClone.getCoordinates()[0];\r\n\r\n            for (let cc of ccc) {\r\n                outCoords.push([Math.round(cc[0] * 1000000) / 1000000, Math.round(cc[1] * 1000000) / 1000000]);\r\n            }\r\n\r\n            this.callback(outCoords);\r\n        });\r\n    }\r\n\r\n\r\n    componentDidMount() {\r\n        this.selectButton = document.getElementById(this.selectId) as HTMLButtonElement;\r\n        this.cancelButton = document.getElementById(this.cancelId) as HTMLButtonElement;\r\n        getMap(this.props.map, this.areaOverlay.olLayer).then((m) => {this.map = m})\r\n    }\r\n\r\n\r\n    setArea() {\r\n        if (!this.map) {\r\n            return;\r\n        }\r\n\r\n        this.selectButton.style.display = 'none';\r\n        this.cancelButton.style.display = '';\r\n\r\n        this.areaOverlay.source.clear();\r\n        this.map.addInteraction(this.draw);\r\n        this.callback(null);\r\n    }\r\n\r\n    cancel() {\r\n        if (!this.map) {\r\n            return;\r\n        }\r\n        this.selectButton.style.display = '';\r\n        this.cancelButton.style.display = 'none';\r\n\r\n        this.areaOverlay.source.clear();\r\n        this.map.removeInteraction(this.draw);\r\n\r\n        this.callback(null);\r\n    }\r\n\r\n    render() {\r\n        return <div className=\"ol-select-area\" style={{margin: '10px'}}>\r\n            <button id={this.selectId} onClick={() => {\r\n                this.setArea()\r\n            }}>Select Area\r\n            </button>\r\n            <button id={this.cancelId} onClick={() => {\r\n                this.cancel()\r\n            }} style={{display: 'none'}}>Cancel\r\n            </button>\r\n        </div>\r\n    }\r\n}\r\n"]}
\ No newline at end of file
+{"version":3,"file":"SelectArea.js","sourceRoot":"","sources":["../../src/reactComponents/SelectArea.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 6/12/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport LayerBaseVectorGeoJson from '../layers/LayerBaseVectorGeoJson';\r\nimport {proj4326, proj3857} from '../olHelpers/projections'\r\nimport makeGuid from '../util/makeGuid';\r\nimport getMap from './helpers/get_map';\r\nimport Map from 'ol/Map'\r\nimport Draw from 'ol/interaction/Draw';\r\nimport Style from 'ol/style/Style';\r\nimport Stroke from 'ol/style/Stroke';\r\nimport Fill from 'ol/style/Fill';\r\nimport Polygon from 'ol/geom/Polygon';\r\nimport Feature from 'ol/Feature';\r\n\r\nexport interface iSelectArea{\r\n    map: Map | (() => Map);\r\n    callback: (coords: Array<number[]>) => any\r\n}\r\n\r\nexport class SelectArea extends React.Component<iSelectArea, {}> {\r\n    map: Map;\r\n    callback: (coords: Array<number[]>) => any;\r\n    areaOverlay: LayerBaseVectorGeoJson;\r\n    draw: Draw;\r\n    selectId: string;\r\n    cancelId: string;\r\n    selectButton: HTMLButtonElement;\r\n    cancelButton: HTMLButtonElement;\r\n\r\n\r\n    constructor(props: iSelectArea, context: Object) {\r\n        super(props, context);\r\n\r\n        this.selectId = makeGuid();\r\n        this.cancelId = makeGuid();\r\n\r\n        this.callback = this.props.callback;\r\n\r\n        this.areaOverlay = new LayerBaseVectorGeoJson('',\r\n            {\r\n                style: new Style({\r\n                    fill: new Fill({\r\n                        color: 'rgba(255, 0, 237, 0.1)'\r\n                    }),\r\n                    stroke: new Stroke({\r\n                        color: 'rgb(255, 0, 237)',\r\n                        width: 2\r\n                    })\r\n                }),\r\n                transform: {dataProjection: proj4326, featureProjection: proj3857}\r\n            });\r\n\r\n        this.draw = new Draw({\r\n            source: this.areaOverlay.source,\r\n            type: 'Polygon'\r\n        });\r\n\r\n        // this.draw.on('drawend', (evt: {feature: {getGeometry: () => Polygon}}) => {\r\n        this.draw.on('drawend', (evt) => {\r\n            this.selectButton.style.display = '';\r\n            this.cancelButton.style.display = 'none';\r\n\r\n\r\n\r\n            let geom = (evt['feature'] as Feature).getGeometry() as Polygon;\r\n            let geomClone = geom.clone();\r\n\r\n            geomClone.transform('EPSG:3857', 'EPSG:4326');\r\n\r\n            setTimeout(() => {\r\n                this.map.removeInteraction(this.draw);\r\n            }, 100);\r\n\r\n            let outCoords = [];\r\n            let ccc = geomClone.getCoordinates()[0];\r\n\r\n            for (let cc of ccc) {\r\n                outCoords.push([Math.round(cc[0] * 1000000) / 1000000, Math.round(cc[1] * 1000000) / 1000000]);\r\n            }\r\n\r\n            this.callback(outCoords);\r\n        });\r\n    }\r\n\r\n\r\n    componentDidMount() {\r\n        this.selectButton = document.getElementById(this.selectId) as HTMLButtonElement;\r\n        this.cancelButton = document.getElementById(this.cancelId) as HTMLButtonElement;\r\n        getMap(this.props.map, this.areaOverlay.olLayer).then((m) => {this.map = m})\r\n    }\r\n\r\n\r\n    setArea() {\r\n        if (!this.map) {\r\n            return;\r\n        }\r\n\r\n        this.selectButton.style.display = 'none';\r\n        this.cancelButton.style.display = '';\r\n\r\n        this.areaOverlay.source.clear();\r\n        this.map.addInteraction(this.draw);\r\n        this.callback(null);\r\n    }\r\n\r\n    cancel() {\r\n        if (!this.map) {\r\n            return;\r\n        }\r\n        this.selectButton.style.display = '';\r\n        this.cancelButton.style.display = 'none';\r\n\r\n        this.areaOverlay.source.clear();\r\n        this.map.removeInteraction(this.draw);\r\n\r\n        this.callback(null);\r\n    }\r\n\r\n    render() {\r\n        return <div className=\"ol-select-area\" style={{margin: '10px'}}>\r\n            <button id={this.selectId} onClick={() => {\r\n                this.setArea()\r\n            }}>Select Area\r\n            </button>\r\n            <button id={this.cancelId} onClick={() => {\r\n                this.cancel()\r\n            }} style={{display: 'none'}}>Cancel\r\n            </button>\r\n        </div>\r\n    }\r\n}\r\n"]}
\ No newline at end of file
diff --git a/dist/reactComponents/Slider.js b/dist/reactComponents/Slider.js
index 12a837e..2ab116c 100644
--- a/dist/reactComponents/Slider.js
+++ b/dist/reactComponents/Slider.js
@@ -2,49 +2,22 @@
 /**
  * Created by glenn on 7/6/2017.
  */
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __assign = (this && this.__assign) || function () {
-    __assign = Object.assign || function(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
-                t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
 Object.defineProperty(exports, "__esModule", { value: true });
-var React = require("react");
-var makeGuid_1 = require("../util/makeGuid");
-var get_browser_1 = require("../util/get_browser");
-var Slider = /** @class */ (function (_super) {
-    __extends(Slider, _super);
-    function Slider(props, context) {
-        var _this = _super.call(this, props, context) || this;
-        _this.uid = makeGuid_1.default();
-        _this.startUid = makeGuid_1.default();
-        _this.stopUid = makeGuid_1.default();
-        _this.intervalUid = makeGuid_1.default();
-        _this.previousUid = makeGuid_1.default();
-        _this.nextUid = makeGuid_1.default();
-        _this.running = false;
-        return _this;
+const React = require("react");
+const makeGuid_1 = require("../util/makeGuid");
+const get_browser_1 = require("../util/get_browser");
+class Slider extends React.Component {
+    constructor(props, context) {
+        super(props, context);
+        this.uid = makeGuid_1.default();
+        this.startUid = makeGuid_1.default();
+        this.stopUid = makeGuid_1.default();
+        this.intervalUid = makeGuid_1.default();
+        this.previousUid = makeGuid_1.default();
+        this.nextUid = makeGuid_1.default();
+        this.running = false;
     }
-    Slider.prototype.componentDidMount = function () {
-        var _this = this;
+    componentDidMount() {
         this.el = document.getElementById(this.uid);
         this.minVal = parseFloat(this.el.min);
         this.maxVal = parseFloat(this.el.max);
@@ -58,57 +31,55 @@ var Slider = /** @class */ (function (_super) {
         this.nextButton = document.getElementById(this.nextUid);
         this.intervalSelect = document.getElementById(this.intervalUid);
         if (get_browser_1.get_browser().name.toUpperCase().indexOf('IE') > -1) {
-            this.el.onchange = function (e) {
-                _this.props.change(parseFloat(e.target['value']));
+            this.el.onchange = (e) => {
+                this.props.change(parseFloat(e.target['value']));
             };
         }
-    };
-    Slider.prototype.updateRunning = function () {
+    }
+    updateRunning() {
         this.el.disabled = this.running;
         this.startButton.style.display = this.running ? 'none' : '';
         this.stopButton.style.display = this.running ? '' : 'none';
         this.nextButton.disabled = this.running;
         this.previousButton.disabled = this.running;
-    };
-    Slider.prototype.startAnimate = function () {
-        var _this = this;
+    }
+    startAnimate() {
         this.running = true;
         this.updateRunning();
-        this.interval = setInterval(function () {
-            var val = parseFloat(_this.el.value);
-            val += _this.step;
-            if (val > _this.maxVal) {
-                val = _this.minVal;
+        this.interval = setInterval(() => {
+            let val = parseFloat(this.el.value);
+            val += this.step;
+            if (val > this.maxVal) {
+                val = this.minVal;
             }
-            _this.el.value = val.toString();
-            _this.props.change(val);
+            this.el.value = val.toString();
+            this.props.change(val);
         }, parseInt(this.intervalSelect.value));
-    };
-    Slider.prototype.stopAnimate = function () {
+    }
+    stopAnimate() {
         clearInterval(this.interval);
         this.running = false;
         this.updateRunning();
-    };
-    Slider.prototype.restartAnimate = function () {
+    }
+    restartAnimate() {
         if (this.running) {
             this.stopAnimate();
             this.startAnimate();
         }
-    };
-    Slider.prototype.increment = function (v) {
-        var val = parseFloat(this.el.value);
+    }
+    increment(v) {
+        let val = parseFloat(this.el.value);
         val = v > 0 ? val + this.step : val - this.step;
         this.el.value = val.toString();
         this.props.change(val);
-    };
-    Slider.prototype.render = function () {
-        var _this = this;
-        var attrs = {
+    }
+    render() {
+        let attrs = {
             id: this.uid,
             min: 0,
             type: 'range',
-            onChange: function (evt) {
-                _this.props.change(parseFloat(evt.target.value));
+            onChange: (evt) => {
+                this.props.change(parseFloat(evt.target.value));
             },
             style: { width: '100%', padding: '4px 0' },
             max: "100",
@@ -126,32 +97,32 @@ var Slider = /** @class */ (function (_super) {
         else {
             delete attrs.value;
         }
-        var start = null;
-        var stop = null;
-        var previous = null;
-        var next = null;
-        var intervalSelect = null;
-        var interval = "200";
+        let start = null;
+        let stop = null;
+        let previous = null;
+        let next = null;
+        let intervalSelect = null;
+        let interval = "200";
         if (this.props.defaultAnimationInterval) {
             interval = this.props.defaultAnimationInterval.toFixed();
         }
         if (this.props.animate) {
-            previous = React.createElement("button", { id: this.previousUid, className: "react-slider-previous", onClick: function () {
-                    _this.increment(-1);
+            previous = React.createElement("button", { id: this.previousUid, className: "react-slider-previous", onClick: () => {
+                    this.increment(-1);
                 }, title: "Previous" });
-            next = React.createElement("button", { id: this.nextUid, className: "react-slider-next", onClick: function () {
-                    _this.increment(1);
+            next = React.createElement("button", { id: this.nextUid, className: "react-slider-next", onClick: () => {
+                    this.increment(1);
                 }, title: "Next" });
-            start = React.createElement("button", { id: this.startUid, className: "react-slider-start", onClick: function () {
-                    _this.startAnimate();
+            start = React.createElement("button", { id: this.startUid, className: "react-slider-start", onClick: () => {
+                    this.startAnimate();
                 }, title: "Start" });
-            stop = React.createElement("button", { id: this.stopUid, className: "react-slider-stop", onClick: function () {
-                    _this.stopAnimate();
+            stop = React.createElement("button", { id: this.stopUid, className: "react-slider-stop", onClick: () => {
+                    this.stopAnimate();
                 }, title: "Stop" });
             intervalSelect = React.createElement("span", null,
                 React.createElement("label", { style: { fontWeight: 'bold', marginRight: '3px' } }, "Interval (s)"),
-                React.createElement("select", { defaultValue: interval, id: this.intervalUid, onChange: function () {
-                        _this.restartAnimate();
+                React.createElement("select", { defaultValue: interval, id: this.intervalUid, onChange: () => {
+                        this.restartAnimate();
                     } },
                     React.createElement("option", { value: "100" }, "0.1"),
                     React.createElement("option", { value: "200" }, "0.2"),
@@ -165,21 +136,20 @@ var Slider = /** @class */ (function (_super) {
                     React.createElement("option", { value: "1000" }, "1.0")));
         }
         return React.createElement("div", { className: "react-slider" },
-            React.createElement("input", __assign({}, attrs)),
+            React.createElement("input", Object.assign({}, attrs)),
             React.createElement("div", { className: "react-slider-controls", style: { textAlign: 'center' } },
                 previous,
                 start,
                 stop,
                 next,
                 intervalSelect));
-    };
-    Slider.defaultProps = {
-        steps: null,
-        animate: false,
-        defaultAnimationInterval: null,
-        value: null
-    };
-    return Slider;
-}(React.Component));
+    }
+}
+Slider.defaultProps = {
+    steps: null,
+    animate: false,
+    defaultAnimationInterval: null,
+    value: null
+};
 exports.Slider = Slider;
 //# sourceMappingURL=Slider.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/Slider.js.map b/dist/reactComponents/Slider.js.map
index f464012..b4e9972 100644
--- a/dist/reactComponents/Slider.js.map
+++ b/dist/reactComponents/Slider.js.map
@@ -1 +1 @@
-{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../src/reactComponents/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\nimport {get_browser} from '../util/get_browser';\r\n\r\nexport interface iSliderOpt {\r\n    steps: number;\r\n    animate: boolean;\r\n    defaultAnimationInterval: number;\r\n    value: number;\r\n}\r\n\r\nexport interface iSlider extends iSliderOpt{\r\n    change: (d: number) => any;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, {}> {\r\n    public static defaultProps = {\r\n        steps: null,\r\n        animate: false,\r\n        defaultAnimationInterval: null,\r\n        value: null\r\n    };\r\n\r\n    private uid: string;\r\n    private startUid: string;\r\n    private stopUid: string;\r\n    private previousUid: string;\r\n    private nextUid: string;\r\n    private intervalUid: string;\r\n    private el: HTMLInputElement;\r\n    private previousButton: HTMLButtonElement;\r\n    private nextButton: HTMLButtonElement;\r\n    private startButton: HTMLButtonElement;\r\n    private stopButton: HTMLButtonElement;\r\n    private intervalSelect: HTMLSelectElement;\r\n    private interval: number;\r\n    private running: boolean;\r\n    private minVal: number;\r\n    private maxVal: number;\r\n    private step: number;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.stopUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.previousUid = makeGuid();\r\n        this.nextUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.stopButton = document.getElementById(this.stopUid) as HTMLButtonElement;\r\n        if (this.props.animate) {\r\n            this.stopButton.style.display = 'none';\r\n        }\r\n        this.previousButton = document.getElementById(this.previousUid) as HTMLButtonElement;\r\n        this.nextButton = document.getElementById(this.nextUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n\r\n        if (get_browser().name.toUpperCase().indexOf('IE') > -1) {\r\n            this.el.onchange = (e) => {\r\n                this.props.change(parseFloat(e.target['value']))\r\n            }\r\n        }\r\n    }\r\n\r\n    updateRunning() {\r\n        this.el.disabled = this.running;\r\n\r\n        this.startButton.style.display = this.running ? 'none' : '';\r\n        this.stopButton.style.display = this.running ? '' : 'none';\r\n\r\n        this.nextButton.disabled = this.running;\r\n        this.previousButton.disabled = this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate() {\r\n        if (this.running) {\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n    increment(v: number) {\r\n        let val = parseFloat(this.el.value);\r\n        val = v > 0 ? val + this.step : val - this.step;\r\n        this.el.value = val.toString();\r\n        this.props.change(val);\r\n    }\r\n\r\n    render() {\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {\r\n                this.props.change(parseFloat(evt.target.value))\r\n            },\r\n            style: {width: '100%', padding: '4px 0'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value ? this.props.value.toString() : '0',\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps) {\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value) {\r\n            delete attrs.defaultValue;\r\n        } else {\r\n            delete attrs.value;\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let previous = null;\r\n        let next = null;\r\n        let intervalSelect = null;\r\n\r\n        let interval = \"200\";\r\n\r\n        if (this.props.defaultAnimationInterval) {\r\n            interval = this.props.defaultAnimationInterval.toFixed();\r\n        }\r\n\r\n        if (this.props.animate) {\r\n            previous = <button id={this.previousUid} className=\"react-slider-previous\" onClick={() => {\r\n                this.increment(-1)\r\n            }} title=\"Previous\"/>;\r\n\r\n            next = <button id={this.nextUid} className=\"react-slider-next\" onClick={() => {\r\n                this.increment(1)\r\n            }} title=\"Next\"/>;\r\n\r\n            start = <button id={this.startUid} className=\"react-slider-start\" onClick={() => {\r\n                this.startAnimate()\r\n            }} title=\"Start\"/>;\r\n\r\n            stop = <button id={this.stopUid} className=\"react-slider-stop\" onClick={() => {\r\n                this.stopAnimate()\r\n            }} title=\"Stop\"/>;\r\n\r\n            intervalSelect = <span>\r\n\r\n            <label style={{fontWeight: 'bold', marginRight: '3px'}}>Interval (s)</label>\r\n            <select defaultValue={interval} id={this.intervalUid} onChange={() => {\r\n                this.restartAnimate()\r\n            }}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div className=\"react-slider\">\r\n            <input {...attrs}/>\r\n            <div className=\"react-slider-controls\" style={{textAlign: 'center'}}>\r\n                {previous}{start}{stop}{next}{intervalSelect}\r\n            </div>\r\n        </div>\r\n    }\r\n\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../src/reactComponents/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\nimport React = require(\"react\");\r\n\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\nimport {get_browser} from '../util/get_browser';\r\n\r\nexport interface iSliderOpt {\r\n    steps: number;\r\n    animate: boolean;\r\n    defaultAnimationInterval: number;\r\n    value: number;\r\n}\r\n\r\nexport interface iSlider extends iSliderOpt{\r\n    change: (d: number) => any;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, {}> {\r\n    public static defaultProps = {\r\n        steps: null,\r\n        animate: false,\r\n        defaultAnimationInterval: null,\r\n        value: null\r\n    };\r\n\r\n    private uid: string;\r\n    private startUid: string;\r\n    private stopUid: string;\r\n    private previousUid: string;\r\n    private nextUid: string;\r\n    private intervalUid: string;\r\n    private el: HTMLInputElement;\r\n    private previousButton: HTMLButtonElement;\r\n    private nextButton: HTMLButtonElement;\r\n    private startButton: HTMLButtonElement;\r\n    private stopButton: HTMLButtonElement;\r\n    private intervalSelect: HTMLSelectElement;\r\n    private interval: number;\r\n    private running: boolean;\r\n    private minVal: number;\r\n    private maxVal: number;\r\n    private step: number;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.stopUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.previousUid = makeGuid();\r\n        this.nextUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.stopButton = document.getElementById(this.stopUid) as HTMLButtonElement;\r\n        if (this.props.animate) {\r\n            this.stopButton.style.display = 'none';\r\n        }\r\n        this.previousButton = document.getElementById(this.previousUid) as HTMLButtonElement;\r\n        this.nextButton = document.getElementById(this.nextUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n\r\n        if (get_browser().name.toUpperCase().indexOf('IE') > -1) {\r\n            this.el.onchange = (e) => {\r\n                this.props.change(parseFloat(e.target['value']))\r\n            }\r\n        }\r\n    }\r\n\r\n    updateRunning() {\r\n        this.el.disabled = this.running;\r\n\r\n        this.startButton.style.display = this.running ? 'none' : '';\r\n        this.stopButton.style.display = this.running ? '' : 'none';\r\n\r\n        this.nextButton.disabled = this.running;\r\n        this.previousButton.disabled = this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate() {\r\n        if (this.running) {\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n    increment(v: number) {\r\n        let val = parseFloat(this.el.value);\r\n        val = v > 0 ? val + this.step : val - this.step;\r\n        this.el.value = val.toString();\r\n        this.props.change(val);\r\n    }\r\n\r\n    render() {\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {\r\n                this.props.change(parseFloat(evt.target.value))\r\n            },\r\n            style: {width: '100%', padding: '4px 0'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value ? this.props.value.toString() : '0',\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps) {\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value) {\r\n            delete attrs.defaultValue;\r\n        } else {\r\n            delete attrs.value;\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let previous = null;\r\n        let next = null;\r\n        let intervalSelect = null;\r\n\r\n        let interval = \"200\";\r\n\r\n        if (this.props.defaultAnimationInterval) {\r\n            interval = this.props.defaultAnimationInterval.toFixed();\r\n        }\r\n\r\n        if (this.props.animate) {\r\n            previous = <button id={this.previousUid} className=\"react-slider-previous\" onClick={() => {\r\n                this.increment(-1)\r\n            }} title=\"Previous\"/>;\r\n\r\n            next = <button id={this.nextUid} className=\"react-slider-next\" onClick={() => {\r\n                this.increment(1)\r\n            }} title=\"Next\"/>;\r\n\r\n            start = <button id={this.startUid} className=\"react-slider-start\" onClick={() => {\r\n                this.startAnimate()\r\n            }} title=\"Start\"/>;\r\n\r\n            stop = <button id={this.stopUid} className=\"react-slider-stop\" onClick={() => {\r\n                this.stopAnimate()\r\n            }} title=\"Stop\"/>;\r\n\r\n            intervalSelect = <span>\r\n\r\n            <label style={{fontWeight: 'bold', marginRight: '3px'}}>Interval (s)</label>\r\n            <select defaultValue={interval} id={this.intervalUid} onChange={() => {\r\n                this.restartAnimate()\r\n            }}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div className=\"react-slider\">\r\n            <input {...attrs}/>\r\n            <div className=\"react-slider-controls\" style={{textAlign: 'center'}}>\r\n                {previous}{start}{stop}{next}{intervalSelect}\r\n            </div>\r\n        </div>\r\n    }\r\n\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/reactComponents/helpers/dateFormat.js b/dist/reactComponents/helpers/dateFormat.js
index c646995..2382b1d 100644
--- a/dist/reactComponents/helpers/dateFormat.js
+++ b/dist/reactComponents/helpers/dateFormat.js
@@ -4,24 +4,23 @@
  */
 Object.defineProperty(exports, "__esModule", { value: true });
 function stringToDate(dateStr) {
-    var parts = dateStr.split('/');
-    var mn = parseInt(parts[0]) - 1;
-    var d = parseInt(parts[1]);
-    var y = parseInt(parts[2]);
-    var dte = new Date(y, mn, d);
+    let parts = dateStr.split('/');
+    let mn = parseInt(parts[0]) - 1;
+    let d = parseInt(parts[1]);
+    let y = parseInt(parts[2]);
+    let dte = new Date(y, mn, d);
     dte.setHours(0, 0, 0);
     return dte;
 }
 exports.stringToDate = stringToDate;
-function dateToString(dte, zeroPad) {
-    if (zeroPad === void 0) { zeroPad = true; }
-    var mn = (dte.getMonth() + 1).toString();
-    var d = dte.getDate().toString();
+function dateToString(dte, zeroPad = true) {
+    let mn = (dte.getMonth() + 1).toString();
+    let d = dte.getDate().toString();
     if (zeroPad) {
         mn = mn.length == 1 ? '0' + mn : mn;
         d = d.length == 1 ? '0' + d : d;
     }
-    return mn + "/" + d + "/" + dte.getFullYear();
+    return `${mn}/${d}/${dte.getFullYear()}`;
 }
 exports.dateToString = dateToString;
 //# sourceMappingURL=dateFormat.js.map
\ No newline at end of file
diff --git a/dist/reactComponents/helpers/dateFormat.js.map b/dist/reactComponents/helpers/dateFormat.js.map
index 05946e0..ee0bd0e 100644
--- a/dist/reactComponents/helpers/dateFormat.js.map
+++ b/dist/reactComponents/helpers/dateFormat.js.map
@@ -1 +1 @@
-{"version":3,"file":"dateFormat.js","sourceRoot":"","sources":["../../../src/reactComponents/helpers/dateFormat.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,SAAgB,YAAY,CAAC,OAAe;IACxC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtB,OAAO,GAAG,CAAC;AACf,CAAC;AAXD,oCAWC;AAED,SAAgB,YAAY,CAAC,GAAS,EAAE,OAAsB;IAAtB,wBAAA,EAAA,cAAsB;IAC1D,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEjC,IAAI,OAAO,EAAC;QACR,EAAE,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC,GAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAE;KACtC;IAED,OAAU,EAAE,SAAI,CAAC,SAAI,GAAG,CAAC,WAAW,EAAI,CAAC;AAC7C,CAAC;AAVD,oCAUC","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nexport function stringToDate(dateStr: string): Date {\r\n    let parts = dateStr.split('/');\r\n\r\n    let mn = parseInt(parts[0]) - 1;\r\n    let d = parseInt(parts[1]);\r\n    let y = parseInt(parts[2]);\r\n\r\n    let dte = new Date(y, mn, d);\r\n    dte.setHours(0, 0, 0);\r\n\r\n    return dte;\r\n}\r\n\r\nexport function dateToString(dte: Date, zeroPad:boolean = true): string {\r\n    let mn = (dte.getMonth() + 1).toString();\r\n    let d = dte.getDate().toString();\r\n\r\n    if (zeroPad){\r\n        mn = mn.length == 1 ? '0' + mn : mn;\r\n        d  = d.length == 1 ? '0' + d  : d ;\r\n    }\r\n\r\n    return `${mn}/${d}/${dte.getFullYear()}`;\r\n}"]}
\ No newline at end of file
+{"version":3,"file":"dateFormat.js","sourceRoot":"","sources":["../../../src/reactComponents/helpers/dateFormat.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,SAAgB,YAAY,CAAC,OAAe;IACxC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtB,OAAO,GAAG,CAAC;AACf,CAAC;AAXD,oCAWC;AAED,SAAgB,YAAY,CAAC,GAAS,EAAE,UAAkB,IAAI;IAC1D,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEjC,IAAI,OAAO,EAAC;QACR,EAAE,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC,GAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAE;KACtC;IAED,OAAO,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AAC7C,CAAC;AAVD,oCAUC","sourcesContent":["/**\r\n * Created by glenn on 6/13/2017.\r\n */\r\n\r\nexport function stringToDate(dateStr: string): Date {\r\n    let parts = dateStr.split('/');\r\n\r\n    let mn = parseInt(parts[0]) - 1;\r\n    let d = parseInt(parts[1]);\r\n    let y = parseInt(parts[2]);\r\n\r\n    let dte = new Date(y, mn, d);\r\n    dte.setHours(0, 0, 0);\r\n\r\n    return dte;\r\n}\r\n\r\nexport function dateToString(dte: Date, zeroPad:boolean = true): string {\r\n    let mn = (dte.getMonth() + 1).toString();\r\n    let d = dte.getDate().toString();\r\n\r\n    if (zeroPad){\r\n        mn = mn.length == 1 ? '0' + mn : mn;\r\n        d  = d.length == 1 ? '0' + d  : d ;\r\n    }\r\n\r\n    return `${mn}/${d}/${dte.getFullYear()}`;\r\n}"]}
\ No newline at end of file
diff --git a/dist/reactComponents/helpers/get_map.js b/dist/reactComponents/helpers/get_map.js
index 25c32f8..2805865 100644
--- a/dist/reactComponents/helpers/get_map.js
+++ b/dist/reactComponents/helpers/get_map.js
@@ -1,14 +1,14 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 function default_1(map, layer) {
-    return new Promise(function (resolve, reject) {
+    return new Promise((resolve, reject) => {
         if (typeof map == 'function') {
-            var getMap_1 = map;
-            var g_1 = setInterval(function () {
-                var m = getMap_1();
+            let getMap = map;
+            let g = setInterval(() => {
+                let m = getMap();
                 if (m) {
                     m.addLayer(layer);
-                    clearInterval(g_1);
+                    clearInterval(g);
                     resolve(m);
                     /*                    console.log(m);
                                         return m;*/
@@ -16,7 +16,7 @@ function default_1(map, layer) {
             }, 15);
         }
         else {
-            var m = map;
+            let m = map;
             m.addLayer(layer);
             resolve(m);
         }
diff --git a/dist/reactComponents/helpers/get_map.js.map b/dist/reactComponents/helpers/get_map.js.map
index eb7cb77..5b77d18 100644
--- a/dist/reactComponents/helpers/get_map.js.map
+++ b/dist/reactComponents/helpers/get_map.js.map
@@ -1 +1 @@
-{"version":3,"file":"get_map.js","sourceRoot":"","sources":["../../../src/reactComponents/helpers/get_map.ts"],"names":[],"mappings":";;AAMA,mBAAyB,GAAsB,EAAE,KAAW;IACxD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAE/B,IAAI,OAAO,GAAG,IAAI,UAAU,EAAE;YAC1B,IAAI,QAAM,GAAG,GAAgB,CAAC;YAE9B,IAAI,GAAC,GAAG,WAAW,CAAC;gBAChB,IAAI,CAAC,GAAG,QAAM,EAAE,CAAC;gBAEjB,IAAI,CAAC,EAAE;oBACH,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClB,aAAa,CAAC,GAAC,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B;mDAC+B;iBACd;YACL,CAAC,EAAE,EAAE,CAAC,CAAC;SACV;aAAM;YACH,IAAI,CAAC,GAAG,GAAU,CAAC;YACnB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC,CAAC;SACd;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAvBD,4BAuBC","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\nimport Map from 'ol/Map';\r\nimport Base from 'ol/layer/Base';\r\n\r\nexport default function (map: Map | (() => Map), layer: Base): Promise<Map> {\r\n    return new Promise((resolve, reject) => {\r\n\r\n        if (typeof map == 'function') {\r\n            let getMap = map as () => Map;\r\n\r\n            let g = setInterval(() => {\r\n                let m = getMap();\r\n\r\n                if (m) {\r\n                    m.addLayer(layer);\r\n                    clearInterval(g);\r\n                    resolve(m);\r\n/*                    console.log(m);\r\n                    return m;*/\r\n                }\r\n            }, 15);\r\n        } else {\r\n            let m = map as Map;\r\n            m.addLayer(layer);\r\n            resolve(m);\r\n        }\r\n    });\r\n}\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"get_map.js","sourceRoot":"","sources":["../../../src/reactComponents/helpers/get_map.ts"],"names":[],"mappings":";;AAMA,mBAAyB,GAAsB,EAAE,KAAW;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAEnC,IAAI,OAAO,GAAG,IAAI,UAAU,EAAE;YAC1B,IAAI,MAAM,GAAG,GAAgB,CAAC;YAE9B,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrB,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;gBAEjB,IAAI,CAAC,EAAE;oBACH,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClB,aAAa,CAAC,CAAC,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B;mDAC+B;iBACd;YACL,CAAC,EAAE,EAAE,CAAC,CAAC;SACV;aAAM;YACH,IAAI,CAAC,GAAG,GAAU,CAAC;YACnB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,CAAC,CAAC,CAAC,CAAC;SACd;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAvBD,4BAuBC","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\nimport Map from 'ol/Map';\r\nimport Base from 'ol/layer/Base';\r\n\r\nexport default function (map: Map | (() => Map), layer: Base): Promise<Map> {\r\n    return new Promise((resolve, reject) => {\r\n\r\n        if (typeof map == 'function') {\r\n            let getMap = map as () => Map;\r\n\r\n            let g = setInterval(() => {\r\n                let m = getMap();\r\n\r\n                if (m) {\r\n                    m.addLayer(layer);\r\n                    clearInterval(g);\r\n                    resolve(m);\r\n/*                    console.log(m);\r\n                    return m;*/\r\n                }\r\n            }, 15);\r\n        } else {\r\n            let m = map as Map;\r\n            m.addLayer(layer);\r\n            resolve(m);\r\n        }\r\n    });\r\n}\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/util/_index.js b/dist/util/_index.js
index 12a47f8..98d8703 100644
--- a/dist/util/_index.js
+++ b/dist/util/_index.js
@@ -3,7 +3,7 @@
  * Created by gavorhes on 9/22/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var checkDefinedf = require("./checkDefined");
+const checkDefinedf = require("./checkDefined");
 var checkDefined;
 (function (checkDefined) {
     checkDefined.undefinedOrNull = checkDefinedf.undefinedOrNull;
diff --git a/dist/util/_index.js.map b/dist/util/_index.js.map
index ce826e6..228a0d9 100644
--- a/dist/util/_index.js.map
+++ b/dist/util/_index.js.map
@@ -1 +1 @@
-{"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/util/_index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,8CAAgD;AAGhD,IAAiB,YAAY,CAG5B;AAHD,WAAiB,YAAY;IACZ,4BAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAChD,8BAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;AACrE,CAAC,EAHgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAG5B","sourcesContent":["/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\nimport * as checkDefinedf from './checkDefined';\r\n\r\n\r\nexport namespace checkDefined {\r\n    export const undefinedOrNull = checkDefinedf.undefinedOrNull;\r\n    export const definedAndNotNull = checkDefinedf.definedAndNotNull;\r\n}\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"_index.js","sourceRoot":"","sources":["../../src/util/_index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,gDAAgD;AAGhD,IAAiB,YAAY,CAG5B;AAHD,WAAiB,YAAY;IACZ,4BAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IAChD,8BAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;AACrE,CAAC,EAHgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAG5B","sourcesContent":["/**\r\n * Created by gavorhes on 9/22/2016.\r\n */\r\n\r\nimport * as checkDefinedf from './checkDefined';\r\n\r\n\r\nexport namespace checkDefined {\r\n    export const undefinedOrNull = checkDefinedf.undefinedOrNull;\r\n    export const definedAndNotNull = checkDefinedf.definedAndNotNull;\r\n}\r\n\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/util/checkDefined.js b/dist/util/checkDefined.js
index 694375f..7c4a4b5 100644
--- a/dist/util/checkDefined.js
+++ b/dist/util/checkDefined.js
@@ -1,7 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("./provide");
-var nm = provide_1.default('util.checkDefined');
+const provide_1 = require("./provide");
+let nm = provide_1.default('util.checkDefined');
 /**
  * check if the input is undefined or null
  * @param input - input pointer
diff --git a/dist/util/checkDefined.js.map b/dist/util/checkDefined.js.map
index 719a1af..bbcda3e 100644
--- a/dist/util/checkDefined.js.map
+++ b/dist/util/checkDefined.js.map
@@ -1 +1 @@
-{"version":3,"file":"checkDefined.js","sourceRoot":"","sources":["../../src/util/checkDefined.ts"],"names":[],"mappings":";;AAAA,qCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,mBAAmB,CAAC,CAAC;AAEtC;;;;GAIG;AACH,SAAgB,eAAe,CAAE,KAAU;IACvC,YAAY,CAAC;IAEb,OAAO,CAAC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAJD,0CAIC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAE,KAAU;IACzC,YAAY,CAAC;IAEb,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAJD,8CAIC;AAED,EAAE,CAAC,iBAAiB,GAAG,iBAAiB,CAAC","sourcesContent":["import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"checkDefined.js","sourceRoot":"","sources":["../../src/util/checkDefined.ts"],"names":[],"mappings":";;AAAA,uCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,mBAAmB,CAAC,CAAC;AAEtC;;;;GAIG;AACH,SAAgB,eAAe,CAAE,KAAU;IACvC,YAAY,CAAC;IAEb,OAAO,CAAC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAJD,0CAIC;AAED,EAAE,CAAC,eAAe,GAAG,eAAe,CAAC;AAGrC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAE,KAAU;IACzC,YAAY,CAAC;IAEb,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC;AAJD,8CAIC;AAED,EAAE,CAAC,iBAAiB,GAAG,iBAAiB,CAAC","sourcesContent":["import provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param input - input pointer\r\n * @returns true undefined or null\r\n */\r\nexport function undefinedOrNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param input - input pointer\r\n * @returns true defined and not null\r\n */\r\nexport function definedAndNotNull (input: any): boolean{\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/util/colors.js b/dist/util/colors.js
index 528b4a5..54b21d8 100644
--- a/dist/util/colors.js
+++ b/dist/util/colors.js
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 11/3/2015.
  */
-var provide_1 = require("./provide");
-var chk = require("./checkDefined");
-var nm = provide_1.default('util.colors');
+const provide_1 = require("./provide");
+const chk = require("./checkDefined");
+let nm = provide_1.default('util.colors');
 /**
  * helper function to convert to hex
  * @param {number|string} x - the number to convert to hex
@@ -13,12 +13,12 @@ var nm = provide_1.default('util.colors');
  * @private
  */
 function _hex(x) {
-    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+    let hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
     if (isNaN(x)) {
         return "00";
     }
     else {
-        var m = x;
+        let m = x;
         return hexDigits[(m - m % 16) / 16] + hexDigits[m % 16];
     }
     // return isNaN(x as number) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
@@ -29,7 +29,7 @@ function _hex(x) {
  * @returns {string} rbg as hex
  */
 function rgb2hex(rgb) {
-    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
+    let rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
     return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
 }
 exports.rgb2hex = rgb2hex;
@@ -42,14 +42,14 @@ nm.rgb2hex = rgb2hex;
  */
 function hexAlphaToRgbOrRgba(hexString, alphaVal) {
     hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
-    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
-    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
-    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
+    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
+    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
+    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
     if (alphaVal) {
-        return "rgba(" + r + "," + g + "," + b + "," + alphaVal + ")";
+        return `rgba(${r},${g},${b},${alphaVal})`;
     }
     else {
-        return "rgba(" + r + "," + g + "," + b + ")";
+        return `rgba(${r},${g},${b})`;
     }
 }
 exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
@@ -61,7 +61,7 @@ nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
  * @returns {string} rgba color
  */
 function rgbToRgba(rgb, alpha) {
-    var pieces = rgb.split(',');
+    let pieces = rgb.split(',');
     pieces[0] = pieces[0].replace('rgb', 'rgba');
     pieces[2] = pieces[2].replace(')', '');
     pieces.push(' ' + alpha.toFixed(1) + ')');
@@ -81,18 +81,17 @@ nm.rgbToRgba = rgbToRgba;
  * @param {boolean} flipColors - if the colors should be flipped
  * @returns {colorLookupByNumber} color lookup function
  */
-function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
-    if (flipColors === void 0) { flipColors = false; }
+function makeBlueGreenRedGradient(minVal, maxVal, flipColors = false) {
     if (typeof flipColors != "boolean") {
         flipColors = false;
     }
     return function (theVal) {
-        var r, g, b;
-        var ratio;
+        let r, g, b;
+        let ratio;
         if (chk.undefinedOrNull(theVal)) {
             return 'rgb(100,100,100)';
         }
-        var percent = (theVal - minVal) / (maxVal - minVal);
+        let percent = (theVal - minVal) / (maxVal - minVal);
         if (flipColors == true) {
             percent = 1 - percent;
         }
@@ -148,11 +147,10 @@ nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
  * @param {boolean} flipColors - if the colors should be flipped
  * @returns {colorLookupByNumber} color lookup function
  */
-function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
-    if (flipColors === void 0) { flipColors = false; }
-    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
+function makeBlueGreenRedGradientZScore(median, stdDev, flipColors = false) {
+    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
     return function (theVal) {
-        var zScore;
+        let zScore;
         if (theVal == null) {
             zScore = null;
         }
diff --git a/dist/util/colors.js.map b/dist/util/colors.js.map
index 025ccd2..9b3a2a9 100644
--- a/dist/util/colors.js.map
+++ b/dist/util/colors.js.map
@@ -1 +1 @@
-{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/util/colors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\n\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x: number|string): string {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    if (isNaN(x as number)){\r\n        return \"00\";\r\n    } else {\r\n        let m = x as number;\r\n        return hexDigits[(m - m % 16) / 16] + hexDigits[m % 16];\r\n    }\r\n    // return isNaN(x as number) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb: string): string {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString: string, alphaVal: number): string {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb: string, alpha: number): string {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal: number, maxVal: number, flipColors:boolean=false): (v: number) => string {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal: number): string {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median: number, stdDev: number, flipColors: boolean = false):(v: number) => string {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal: number): string {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/util/colors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\n\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x: number|string): string {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    if (isNaN(x as number)){\r\n        return \"00\";\r\n    } else {\r\n        let m = x as number;\r\n        return hexDigits[(m - m % 16) / 16] + hexDigits[m % 16];\r\n    }\r\n    // return isNaN(x as number) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb: string): string {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString: string, alphaVal: number): string {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb: string, alpha: number): string {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal: number, maxVal: number, flipColors:boolean=false): (v: number) => string {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal: number): string {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median: number, stdDev: number, flipColors: boolean = false):(v: number) => string {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal: number): string {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n"]}
\ No newline at end of file
diff --git a/dist/util/dateConvert.js b/dist/util/dateConvert.js
index 989514e..a2da40e 100644
--- a/dist/util/dateConvert.js
+++ b/dist/util/dateConvert.js
@@ -3,10 +3,10 @@
  * Created by gavorhes on 11/4/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("./provide");
-var nm = provide_1.default('util.dateConvert');
+const provide_1 = require("./provide");
+let nm = provide_1.default('util.dateConvert');
 function leadingPad(inNum) {
-    var strNum = inNum.toFixed();
+    let strNum = inNum.toFixed();
     if (strNum.length < 2) {
         strNum = '0' + strNum;
     }
@@ -19,13 +19,13 @@ nm.leadingPad = leadingPad;
  * @returns {string} the formatted date string
  */
 function dateToYyyyMmDdHhMmSs(dte) {
-    var yr = dte.getFullYear();
-    var month = leadingPad(dte.getMonth() + 1);
-    var day = leadingPad(dte.getDate());
-    var hrs = leadingPad(dte.getHours());
-    var mns = leadingPad(dte.getMinutes());
-    var secs = leadingPad(dte.getSeconds());
-    return yr + "-" + month + "-" + day + " " + hrs + ":" + mns + ":" + secs;
+    let yr = dte.getFullYear();
+    let month = leadingPad(dte.getMonth() + 1);
+    let day = leadingPad(dte.getDate());
+    let hrs = leadingPad(dte.getHours());
+    let mns = leadingPad(dte.getMinutes());
+    let secs = leadingPad(dte.getSeconds());
+    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;
 }
 exports.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
 nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
@@ -35,11 +35,11 @@ nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
  * @returns {string} the formatted date string
  */
 function dateToYyyyMmDdHh000(dte) {
-    var yr = dte.getFullYear();
-    var month = leadingPad(dte.getMonth() + 1);
-    var day = leadingPad(dte.getDate());
-    var hrs = leadingPad(dte.getHours());
-    return "" + yr + month + day + "_" + hrs + "0000";
+    let yr = dte.getFullYear();
+    let month = leadingPad(dte.getMonth() + 1);
+    let day = leadingPad(dte.getDate());
+    let hrs = leadingPad(dte.getHours());
+    return `${yr}${month}${day}_${hrs}0000`;
 }
 exports.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
 nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
diff --git a/dist/util/dateConvert.js.map b/dist/util/dateConvert.js.map
index 641be93..1c16a05 100644
--- a/dist/util/dateConvert.js.map
+++ b/dist/util/dateConvert.js.map
@@ -1 +1 @@
-{"version":3,"file":"dateConvert.js","sourceRoot":"","sources":["../../src/util/dateConvert.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,kBAAkB,CAAC,CAAC;AAErC,SAAS,UAAU,CAAC,KAAa;IAC7B,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;KACzB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;AAE3B;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,GAAS;IAC1C,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,OAAU,EAAE,SAAI,KAAK,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,SAAI,IAAM,CAAC;AACzD,CAAC;AATD,oDASC;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAG/C;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,GAAS;IAEzC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErC,OAAO,KAAG,EAAE,GAAG,KAAK,GAAG,GAAG,SAAI,GAAG,SAAM,CAAC;AAC5C,CAAC;AARD,kDAQC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util.dateConvert');\r\n\r\nfunction leadingPad(inNum: number) {\r\n    let strNum = inNum.toFixed();\r\n    if (strNum.length < 2) {\r\n        strNum = '0' + strNum;\r\n    }\r\n\r\n    return strNum;\r\n}\r\n\r\nnm.leadingPad = leadingPad;\r\n\r\n/**\r\n * Given a date return a string in the format YYYY-mm-dd hh:MM:SS\r\n * @param {Date} dte to convert\r\n * @returns {string} the formatted date string\r\n */\r\nexport function dateToYyyyMmDdHhMmSs(dte: Date): string {\r\n    let yr = dte.getFullYear();\r\n    let month = leadingPad(dte.getMonth() + 1);\r\n    let day = leadingPad(dte.getDate());\r\n    let hrs = leadingPad(dte.getHours());\r\n    let mns = leadingPad(dte.getMinutes());\r\n    let secs = leadingPad(dte.getSeconds());\r\n\r\n    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;\r\n}\r\n\r\nnm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;\r\n\r\n\r\n/**\r\n * Given a date return a string in the format YYYYmmdd_hh0000\r\n * @param {Date} dte the input date\r\n * @returns {string} the formatted date string\r\n */\r\nexport function dateToYyyyMmDdHh000(dte: Date): string {\r\n\r\n    let yr = dte.getFullYear();\r\n    let month = leadingPad(dte.getMonth() + 1);\r\n    let day = leadingPad(dte.getDate());\r\n    let hrs = leadingPad(dte.getHours());\r\n\r\n    return `${yr}${month}${day}_${hrs}0000`;\r\n}\r\n\r\nnm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"dateConvert.js","sourceRoot":"","sources":["../../src/util/dateConvert.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,kBAAkB,CAAC,CAAC;AAErC,SAAS,UAAU,CAAC,KAAa;IAC7B,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;KACzB;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC;AAE3B;;;;GAIG;AACH,SAAgB,oBAAoB,CAAC,GAAS;IAC1C,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAExC,OAAO,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACzD,CAAC;AATD,oDASC;AAED,EAAE,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;AAG/C;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,GAAS;IAEzC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAErC,OAAO,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC;AAC5C,CAAC;AARD,kDAQC;AAED,EAAE,CAAC,mBAAmB,GAAG,mBAAmB,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/4/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util.dateConvert');\r\n\r\nfunction leadingPad(inNum: number) {\r\n    let strNum = inNum.toFixed();\r\n    if (strNum.length < 2) {\r\n        strNum = '0' + strNum;\r\n    }\r\n\r\n    return strNum;\r\n}\r\n\r\nnm.leadingPad = leadingPad;\r\n\r\n/**\r\n * Given a date return a string in the format YYYY-mm-dd hh:MM:SS\r\n * @param {Date} dte to convert\r\n * @returns {string} the formatted date string\r\n */\r\nexport function dateToYyyyMmDdHhMmSs(dte: Date): string {\r\n    let yr = dte.getFullYear();\r\n    let month = leadingPad(dte.getMonth() + 1);\r\n    let day = leadingPad(dte.getDate());\r\n    let hrs = leadingPad(dte.getHours());\r\n    let mns = leadingPad(dte.getMinutes());\r\n    let secs = leadingPad(dte.getSeconds());\r\n\r\n    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;\r\n}\r\n\r\nnm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;\r\n\r\n\r\n/**\r\n * Given a date return a string in the format YYYYmmdd_hh0000\r\n * @param {Date} dte the input date\r\n * @returns {string} the formatted date string\r\n */\r\nexport function dateToYyyyMmDdHh000(dte: Date): string {\r\n\r\n    let yr = dte.getFullYear();\r\n    let month = leadingPad(dte.getMonth() + 1);\r\n    let day = leadingPad(dte.getDate());\r\n    let hrs = leadingPad(dte.getHours());\r\n\r\n    return `${yr}${month}${day}_${hrs}0000`;\r\n}\r\n\r\nnm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;\r\n"]}
\ No newline at end of file
diff --git a/dist/util/formatString.js b/dist/util/formatString.js
index 3dffe60..04c5005 100644
--- a/dist/util/formatString.js
+++ b/dist/util/formatString.js
@@ -20,8 +20,8 @@ if (!String.prototype.format) {
      * @returns {string} converted string
      */
     String.prototype.format = function () {
-        var args = arguments;
-        for (var i = 0; i < args.length; i++) {
+        let args = arguments;
+        for (let i = 0; i < args.length; i++) {
             args[i] = (args[i] !== null ? args[i] : '');
         }
         //if the first argument is an array, use that
diff --git a/dist/util/getUrlParams.js b/dist/util/getUrlParams.js
index 9aa3f8c..5c6dedc 100644
--- a/dist/util/getUrlParams.js
+++ b/dist/util/getUrlParams.js
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
 /**
  * Created by gavorhes on 6/23/2016.
  */
-var provide_1 = require("./provide");
-var nm = provide_1.default('util');
+const provide_1 = require("./provide");
+let nm = provide_1.default('util');
 function isNumber(checkVal) {
-    var returnVal = parseFloat(checkVal);
+    let returnVal = parseFloat(checkVal);
     return !isNaN(returnVal);
 }
 /**
@@ -15,20 +15,20 @@ function isNumber(checkVal) {
  */
 function getUrlParams() {
     "use strict";
-    var match;
-    var pl = /\+/g; // Regex for replacing addition symbol with a space
-    var search = /([^&=]+)=?([^&]*)/g;
-    var decode = function (s) {
+    let match;
+    let pl = /\+/g; // Regex for replacing addition symbol with a space
+    let search = /([^&=]+)=?([^&]*)/g;
+    let decode = function (s) {
         return decodeURIComponent(s.replace(pl, " "));
     };
-    var query = window.location.search.substring(1);
-    var urlParams = {};
+    let query = window.location.search.substring(1);
+    let urlParams = {};
     while (match = search.exec(query)) {
         /**
          * @type {string}
          */
-        var val = decode(match[2]).trim();
-        var typedVal = null;
+        let val = decode(match[2]).trim();
+        let typedVal = null;
         if (val.length == 0) {
             // pass
         }
diff --git a/dist/util/getUrlParams.js.map b/dist/util/getUrlParams.js.map
index dc30f63..a4d8d96 100644
--- a/dist/util/getUrlParams.js.map
+++ b/dist/util/getUrlParams.js.map
@@ -1 +1 @@
-{"version":3,"file":"getUrlParams.js","sourceRoot":"","sources":["../../src/util/getUrlParams.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,qCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB,SAAS,QAAQ,CAAC,QAAa;IAC3B,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAwB,YAAY;IAChC,YAAY,CAAC;IAEb,IAAI,KAAK,CAAC;IACV,IAAI,EAAE,GAAG,KAAK,CAAC,CAAE,mDAAmD;IACpE,IAAI,MAAM,GAAG,oBAAoB,CAAC;IAClC,IAAI,MAAM,GAAG,UAAU,CAAS;QAC5B,OAAO,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC/B;;WAEG;QACH,IAAI,GAAG,GAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAC;YAChB,OAAO;SACV;aACI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAC;YACnB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC;gBACtB,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;aAC9B;iBAAM;gBACH,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC5B;SACJ;aACI,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,EAAC;YACjE,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;SAC1C;aACI;YACD,QAAQ,GAAG,GAAG,CAAC;SAClB;QACK,SAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;KACjD;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAvCD,+BAuCC;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/23/2016.\r\n */\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\nfunction isNumber(checkVal: any):  boolean{\r\n    let returnVal = parseFloat(checkVal);\r\n\r\n    return !isNaN(returnVal);\r\n}\r\n\r\n/**\r\n *\r\n * @returns {object} object representation of url params\r\n */\r\nexport default function getUrlParams() {\r\n    \"use strict\";\r\n\r\n    let match;\r\n    let pl = /\\+/g;  // Regex for replacing addition symbol with a space\r\n    let search = /([^&=]+)=?([^&]*)/g;\r\n    let decode = function (s: string) {\r\n        return decodeURIComponent(s.replace(pl, \" \"));\r\n    };\r\n    let query = window.location.search.substring(1);\r\n\r\n    let urlParams = {};\r\n    while (match = search.exec(query)) {\r\n        /**\r\n         * @type {string}\r\n         */\r\n        let val =  decode(match[2]).trim();\r\n\r\n        let typedVal = null;\r\n        if (val.length == 0){\r\n            // pass\r\n        }\r\n        else if (isNumber(val)){\r\n            if (val.indexOf('.') > -1){\r\n                typedVal = parseFloat(val);\r\n            } else {\r\n                typedVal = parseInt(val);\r\n            }\r\n        }\r\n        else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true'){\r\n            typedVal = val.toLowerCase() == 'true';\r\n        }\r\n        else {\r\n            typedVal = val;\r\n        }\r\n        (<any>urlParams)[decode(match[1])] = typedVal;\r\n    }\r\n\r\n    return urlParams;\r\n}\r\n\r\nnm.getUrlParams = getUrlParams;\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"getUrlParams.js","sourceRoot":"","sources":["../../src/util/getUrlParams.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,uCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB,SAAS,QAAQ,CAAC,QAAa;IAC3B,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAwB,YAAY;IAChC,YAAY,CAAC;IAEb,IAAI,KAAK,CAAC;IACV,IAAI,EAAE,GAAG,KAAK,CAAC,CAAE,mDAAmD;IACpE,IAAI,MAAM,GAAG,oBAAoB,CAAC;IAClC,IAAI,MAAM,GAAG,UAAU,CAAS;QAC5B,OAAO,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,OAAO,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC/B;;WAEG;QACH,IAAI,GAAG,GAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAC;YAChB,OAAO;SACV;aACI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAC;YACnB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC;gBACtB,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;aAC9B;iBAAM;gBACH,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC5B;SACJ;aACI,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,EAAC;YACjE,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;SAC1C;aACI;YACD,QAAQ,GAAG,GAAG,CAAC;SAClB;QACK,SAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;KACjD;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAvCD,+BAuCC;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/23/2016.\r\n */\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\nfunction isNumber(checkVal: any):  boolean{\r\n    let returnVal = parseFloat(checkVal);\r\n\r\n    return !isNaN(returnVal);\r\n}\r\n\r\n/**\r\n *\r\n * @returns {object} object representation of url params\r\n */\r\nexport default function getUrlParams() {\r\n    \"use strict\";\r\n\r\n    let match;\r\n    let pl = /\\+/g;  // Regex for replacing addition symbol with a space\r\n    let search = /([^&=]+)=?([^&]*)/g;\r\n    let decode = function (s: string) {\r\n        return decodeURIComponent(s.replace(pl, \" \"));\r\n    };\r\n    let query = window.location.search.substring(1);\r\n\r\n    let urlParams = {};\r\n    while (match = search.exec(query)) {\r\n        /**\r\n         * @type {string}\r\n         */\r\n        let val =  decode(match[2]).trim();\r\n\r\n        let typedVal = null;\r\n        if (val.length == 0){\r\n            // pass\r\n        }\r\n        else if (isNumber(val)){\r\n            if (val.indexOf('.') > -1){\r\n                typedVal = parseFloat(val);\r\n            } else {\r\n                typedVal = parseInt(val);\r\n            }\r\n        }\r\n        else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true'){\r\n            typedVal = val.toLowerCase() == 'true';\r\n        }\r\n        else {\r\n            typedVal = val;\r\n        }\r\n        (<any>urlParams)[decode(match[1])] = typedVal;\r\n    }\r\n\r\n    return urlParams;\r\n}\r\n\r\nnm.getUrlParams = getUrlParams;\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/util/get_browser.js b/dist/util/get_browser.js
index 2b587fd..d0d65c0 100644
--- a/dist/util/get_browser.js
+++ b/dist/util/get_browser.js
@@ -5,7 +5,7 @@
  */
 Object.defineProperty(exports, "__esModule", { value: true });
 function get_browser() {
-    var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
+    let ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
     if (/trident/i.test(M[1])) {
         tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
         return { name: 'IE', version: (tem[1] || '') };
diff --git a/dist/util/makeGuid.js b/dist/util/makeGuid.js
index d0b744f..3156128 100644
--- a/dist/util/makeGuid.js
+++ b/dist/util/makeGuid.js
@@ -3,8 +3,8 @@
  * Created by gavorhes on 11/3/2015.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("./provide");
-var nm = provide_1.default('util');
+const provide_1 = require("./provide");
+let nm = provide_1.default('util');
 /**
  * guids are used to uniquely identify groups and features
  * @returns {string} a new guid
@@ -12,7 +12,7 @@ var nm = provide_1.default('util');
 function makeGuid() {
     return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
         .replace(/[xy]/g, function (c) {
-        var r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
+        let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
         return v.toString(16);
     });
 }
diff --git a/dist/util/makeGuid.js.map b/dist/util/makeGuid.js.map
index 7015e02..fa78154 100644
--- a/dist/util/makeGuid.js.map
+++ b/dist/util/makeGuid.js.map
@@ -1 +1 @@
-{"version":3,"file":"makeGuid.js","sourceRoot":"","sources":["../../src/util/makeGuid.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB;;;GAGG;AACH,SAAgB,QAAQ;IAChB,OAAO,sCAAsC;SACxC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAEjE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AAEf,CAAC;AARD,4BAQC;AACD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nexport function makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n"]}
\ No newline at end of file
+{"version":3,"file":"makeGuid.js","sourceRoot":"","sources":["../../src/util/makeGuid.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAGzB;;;GAGG;AACH,SAAgB,QAAQ;IAChB,OAAO,sCAAsC;SACxC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAEjE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AAEf,CAAC;AARD,4BAQC;AACD,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,kBAAe,QAAQ,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nexport function makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n"]}
\ No newline at end of file
diff --git a/dist/util/objectHelpers.js b/dist/util/objectHelpers.js
index 7bb0153..03b67de 100644
--- a/dist/util/objectHelpers.js
+++ b/dist/util/objectHelpers.js
@@ -3,8 +3,8 @@
  * Created by gavorhes on 6/7/2016.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-var provide_1 = require("./provide");
-var nm = provide_1.default('util');
+const provide_1 = require("./provide");
+let nm = provide_1.default('util');
 /**
  * iterate over the key value pairs of an object
  * @example for (let x:KeyValuePair of keyValPairs(object)){..}
@@ -12,9 +12,8 @@ var nm = provide_1.default('util');
  * @returns {Array<keyVals>} - array of key value pairs
  */
 function keyValPairs(obj) {
-    var outArray = [];
-    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {
-        var key = _a[_i];
+    let outArray = [];
+    for (let key of Object.keys(obj)) {
         outArray.push({ 'key': key, 'value': obj[key] });
     }
     outArray.sort(function (a, b) {
diff --git a/dist/util/objectHelpers.js.map b/dist/util/objectHelpers.js.map
index 9f4e88a..cb0fcda 100644
--- a/dist/util/objectHelpers.js.map
+++ b/dist/util/objectHelpers.js.map
@@ -1 +1 @@
-{"version":3,"file":"objectHelpers.js","sourceRoot":"","sources":["../../src/util/objectHelpers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAWzB;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAuB;IAC/C,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,KAAgB,UAAgB,EAAhB,KAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;QAA7B,IAAI,GAAG,SAAA;QACR,QAAQ,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;KAElD;IACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC;AAbD,kCAaC;AAED,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/7/2016.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\nexport interface keyVals {\r\n    key: string;\r\n    value: Object\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * iterate over the key value pairs of an object\r\n * @example for (let x:KeyValuePair of keyValPairs(object)){..}\r\n * @param {object} obj - the input object\r\n * @returns {Array<keyVals>} - array of key value pairs\r\n */\r\nexport function keyValPairs(obj: {[s: string]: any}): Array<keyVals> {\r\n    let outArray: Array<keyVals> = [];\r\n    for (let key of Object.keys(obj)) {\r\n        outArray.push({'key': key, 'value': obj[key]});\r\n\r\n    }\r\n    outArray.sort(function (a, b) {\r\n        \"use strict\";\r\n\r\n        return a > b ? 1 : -1;\r\n    });\r\n\r\n    return outArray;\r\n}\r\n\r\nnm.keyValPairs = keyValPairs;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"objectHelpers.js","sourceRoot":"","sources":["../../src/util/objectHelpers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,uCAAgC;AAChC,IAAI,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAC,CAAC;AAWzB;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAuB;IAC/C,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAClC,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC;KAElD;IACD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC;AAbD,kCAaC;AAED,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC","sourcesContent":["/**\r\n * Created by gavorhes on 6/7/2016.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\nexport interface keyVals {\r\n    key: string;\r\n    value: Object\r\n}\r\n\r\n\r\n\r\n\r\n/**\r\n * iterate over the key value pairs of an object\r\n * @example for (let x:KeyValuePair of keyValPairs(object)){..}\r\n * @param {object} obj - the input object\r\n * @returns {Array<keyVals>} - array of key value pairs\r\n */\r\nexport function keyValPairs(obj: {[s: string]: any}): Array<keyVals> {\r\n    let outArray: Array<keyVals> = [];\r\n    for (let key of Object.keys(obj)) {\r\n        outArray.push({'key': key, 'value': obj[key]});\r\n\r\n    }\r\n    outArray.sort(function (a, b) {\r\n        \"use strict\";\r\n\r\n        return a > b ? 1 : -1;\r\n    });\r\n\r\n    return outArray;\r\n}\r\n\r\nnm.keyValPairs = keyValPairs;\r\n"]}
\ No newline at end of file
diff --git a/dist/util/provide.js b/dist/util/provide.js
index 44adc07..92f4c60 100644
--- a/dist/util/provide.js
+++ b/dist/util/provide.js
@@ -13,10 +13,10 @@ function provide(namespace) {
     if (typeof window.gv == 'undefined') {
         window.gv = {};
     }
-    var parts = namespace.split('.');
-    var nameSpace = window.gv;
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
+    let parts = namespace.split('.');
+    let nameSpace = window.gv;
+    for (let i = 0; i < parts.length; i++) {
+        let newObject = nameSpace[parts[i]];
         if (typeof newObject == 'undefined') {
             nameSpace[parts[i]] = {};
         }
diff --git a/tsconfig.json b/tsconfig.json
index df2a6c1..f108e7e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -7,7 +7,7 @@
     "watch": true,
     "baseUrl": "./",
     "module": "commonjs",
-    "target": "es5",
+    "target": "es2015",
     "sourceMap": true,
     "inlineSources": true,
     "jsx": "react",
-- 
GitLab